目录
1 numpy 的基本介绍
2 numpy里的两种新数据类型:ndarray 和 matrix
2.1 numpy特殊的数据类型
2.1.1 python的数据类型
2.1.2 首先 python原生的list 和 tuple
2.1.3 numpy的数据类型
2.2 np.matrix() 或者 np.mat()
2.2.1 首先,两种写法相同
2.2.2 np.matrix的特点
2.2.3 np.matrix的属性
2.3 np.matrix的方法
2.3.1 比如关于 .reshape()方法
2.3.2 其他方法
2.4 np.array 只是数组,本质也可以视为矩阵?
2.5 代码例子
2.6 两者矩阵的计算方式的差别
2.6.1 线性代数里的矩阵计算和 numpy里矩阵计算的区别
2.6.2 矩阵的+
2.6.3 矩阵的-
2.6.4 矩阵的*
2.6.5 矩阵的/
3 np.matrix的相关
3.1 两种写法
3.2 优点
3.2.1 求转置矩阵方便
3.2.2 求逆矩阵方便
3.2.3 求矩阵的秩方便
3.3 相关代码试验
4 np 与多项式
4.1 创建二项式公式
4.2 求函数的导函数
4.3 设置多项式的X轴和Y轴内容
4.4 利用matplotlib 打印 带坐标轴的函数图形
4.5 代码相关
5 创建数组的各种方法
5.0 总结
5.1 np.arrange()
5.2 np.linspace()
5.3 np.random.random
1 numpy 的基本介绍
2 numpy里的两种新数据类型:ndarray 和 matrix
2.1 numpy特殊的数据类型
2.1.1 python的数据类型
- list=[]
- tupe=()
- dict={}
2.1.2 首先 python原生的list 和 tuple
- 就不是matrix
- 因此就没有.shape属性
- 也不能被 reshape()
- 包括 .shape .ndim .size .dtype .itemsize 这些属性都没有
2.1.3 numpy的数据类型
- ndarray,是用np.array() 创建的数据类型
- matrix,是用np.matrix() 创建的数据类型
- 这两种数据类型都是用来保存,矩阵/向量组的
- 写入例如
- A=np.array([[1,2,3],[4,5,6]])
- 注意矩阵里,多套[] 的嵌套
2.2 np.matrix() 或者 np.mat()
2.2.1 首先,两种写法相同
首先np.matrix()=np.mat()
2.2.2 np.matrix的特点
- np.matrix 显然就是指矩阵,或向量组
- np.matrix 甚至还可以是三维的,比如 np.mat([[1,2,3],[1,2,3]],[[1,2,3],[1,2,3]])
- np.matrix 可以从字符串数据 / 或数字中创建矩阵
- np.matrix() 无论是从字符串内容创建的,还是从数字创建的,没有区别
- 对比下,np.array 只能是数字中创建数组
2.2.3 np.matrix的属性
- np.matrix().shape #n行m列,
- np.matrix().ndim #维度数,比如(2,3) 是2维的
- np.matrix().size #矩阵的元素个数=n*m
- np.matrix().dtype #矩阵元素的类型,而不是矩阵的类型
- np.matrix().itemsize #矩阵元素的大小
2.3 np.matrix的方法
2.3.1 比如关于 .reshape()方法
- 只要修改合理,可以根据总元素数,随意修改元素的实际shape
- 比如(12,) 修改为(3,4) 或(4,3)
2.3.2 其他方法
2.3.3 np.matrix() 可以把其他类型得数组/矩阵等,转化为矩阵
2.4 np.array 只是数组,本质也可以视为矩阵?
- 和np.matrix的区别到底是?
2.5 代码例子
- print(A) #可直接打印矩阵内容
- type(A) #可获得变量类型
- 只有 ndarray 和 matrix 才有 .shape 属性和使用 reshape()方法
import numpy as npmylist1=[1,2,3,4,5,6]
mytuple1=(1,2,3,4,5,6)
A1=np.mat("1,2,3;10,20,30") #mat=matrix 可以从string里创建向量组
A=np.mat([[1,2,3],[10,20,30]])
B=np.matrix([[1,2,3],[10,20,30]])
C=np.array([[1,2,3],[10,20,30]]) #np.array()只能用数字创建向量组#py语法内容
print(f"mylist1:{type(mylist1)}\n{mylist1}")
print(f"mytuple1:{type(mytuple1)}\n{mytuple1}")#numpy 语法内容
print(f"A1:{type(A1)}维数={A1.shape}\n{A1}")
print(f"A:{type(A)}维数={A.shape}\n{A}")
print(f"B:{type(B)}维数={B.shape}\n{B}")
print(f"C:{type(C)}维数={C.shape}\n{C}")#测试 向量组/矩阵.属性 .shape#python里原生的list和tuple没有shape属性
#print(mylist1.shape)
#print(mytuple1.shape)# numpy里,numpy.matrix 和 numpy.ndarray 都是有维度的矩阵/向量组
print(A1.shape)
print(A.shape)
print(B.shape)
print(C.shape)#测试 矩阵/向量组的多个属性
print(A.ndim) #几维
print(A.shape) #n行m列?具体的维度数
print(A.size) #总数量个数=n*m
#print(A.type) #报错
print(A.dtype) #描述数组元素类型,而不是数组整体的类型
print(A.itemsize) #数组每个元素的字节大小。比如一个数组的元素为float64,它的itemsize为8(=64/8)
print(A.data) #?# 可被reshape的部分数组,向量,向量组,矩阵?
print(f"C可被变形为\n{C.reshape(3,2)}")
# py的原生类型list tuple无法使用reshape()方法
#print(f"mylist1可被变形为{mylist1.reshape(3,2)}")
2.6 两者矩阵的计算方式的差别
2.6.1 线性代数里的矩阵计算和 numpy里矩阵计算的区别
矩阵的+,- ,* ,/, 虽然从线性代数和numpy的计算是有区别的
- 矩阵加法,线性代数=numpy
- 矩阵减法,线性代数=numpy
- 矩阵乘法
- 线性代数里包括很多,点乘,叉乘等等
- numpy里除了点乘,叉乘外,还包括对应位置元素的乘法?
- 矩阵加法,线性代数=numpy
- 线性代数理论上没有矩阵除法
- numpy还包括对应位置元素的除法?
2.6.2 矩阵的+
- 同型矩阵的对应元素直接相加
2.6.3 矩阵的-
- 同型矩阵的对应元素直接相减
2.6.4 矩阵的*
- 其实这个挺有问题的
- 矩阵的乘法分为点乘--内积 和 叉乘--外积
- 但是 numpy提供了一种同型矩阵对应元素相乘的算法
2.6.5 矩阵的/
- 理论上,线性代数里并没有矩阵的除法吧
- 而numpy提供了一种,两个同型矩阵,对应元素/的算法。。。。
3 np.matrix的相关
3.1 两种写法
- np.matrix()=np.mat()
3.2 优点
3.2.1 求转置矩阵方便
- 转置矩阵方法1:A.T
- 转置矩阵方法1:np.transpose(A)
3.2.2 求逆矩阵方便
- 逆矩阵方法1:A.I (注意,ndarray是不能这样求逆矩阵的)
- 逆矩阵方法2:
3.2.3 求矩阵的秩方便
- 矩阵的秩方法1:np.linalg.matrix_rank(A))
3.3 相关代码试验
import numpy as npA=np.mat([[1,2,3],[10,20,30]])
print(A)
print(A.T)
print(A.I)
print("A的秩为:{}".format(np.linalg.matrix_rank(A)))
print()A=np.mat([[1,2,3],[10,20,30]])
print(A)
A=np.mat([[1,2,3],[10,20,30]])
print(A.T)
A=np.mat([[1,2,3],[10,20,30]])
print(A.I)
print()A=np.mat([[1,2,3],[10,20,30]])
print(A)
print(A.I)
print()
4 np 与多项式
- numpy 可以支持多项式的计算
- 配合 matplotlib 可以显示多项式的图形
4.1 创建二项式公式
#np与二项式
# y = 2x^2 + 4x + 8
arr = np.array([2, 4, 8])
func = np.poly1d(arr)
4.2 求函数的导函数
# m=1表示求一阶导数,依次类推
func1 = func.deriv(m=1)
4.3 设置多项式的X轴和Y轴内容
# 设置定义域-5,5;并将定义域等分了100份
x = np.linspace(-5, 5, 100)y = func(x)
y1 = func1(x)
4.4 利用matplotlib 打印 带坐标轴的函数图形
- # 绘制
plt.plot(x, y, label="{}".format(func))
plt.plot(x, y1, label="{}".format(func1)) - plt.xlabel("x")
- plt.legend()
- plt.show()
# 绘制
plt.plot(x, y, label="{}".format(func))
plt.plot(x, y1, label="{}".format(func1))
plt.xlabel("x")
plt.ylabel("y")# 显示图例
plt.legend()# 显示图像
plt.show()
4.5 代码相关
import numpy as np
import matplotlib.pyplot as plt#np与二项式
# y = 2x^2 + 4x + 8
arr = np.array([2, 4, 8])
func = np.poly1d(arr)# m=1表示求一阶导数,依次类推
func1 = func.deriv(m=1)# 设置定义域-5,5;并将定义域等分了100份
x = np.linspace(-5, 5, 100)y = func(x)
y1 = func1(x)# 打印多项式
print(func)
# 打印多项式对应的一阶导数
print(func1)# 绘制
plt.plot(x, y, label="{}".format(func))
plt.plot(x, y1, label="{}".format(func1))
plt.xlabel("x")
plt.ylabel("y")# 显示图例
plt.legend()print("多项式的根:")
print(np.roots(func))# 显示图像
plt.show()
5 创建数组的各种方法
5.0 总结
- 方法1,前面的几种手动方法
- 方法2, reshape()
- 方法3,
5.1 np.arrange()
np.arrange(1,10,1)
5.2 np.linspace()
- np.linspace(10)
- np.linspace(1,10)
- np.linspace(1,10,50)
5.3 np.random.random
- np.random.random(10)
- 生成的都是[0,1)的数,数量为10个