在Python中做科学计算的基础库,重在数值计算,主要用于多维数组(矩阵)处理的库。用来存储和处理大型矩阵,比Python自身的嵌套列表结构要高效的多。本身是由C语言开发,是个很基础的扩展,Python其余的科学计算扩展大部分都是以此为基础。
NumPy 数组(array) 是一个多维的数组对象,称为ndarray,具有矢量算术运算能力和复杂的广播能力,并具有执行速度快和节省空间的特点。注意:ndarray的下标从0开始,且数组里的所有元素必须是相同类型
Numpy库中还存在着另一种数据类型-- 矩阵(matrix) 与MATLAB中matrices等价
数组array类型转换为矩阵matrix类型
randMat = np.mat(np.random.randint(0, 7,(2,2)))
print(randMat)
print(randMat.I) # 对randMat矩阵做逆运算
运行结果
[[4 0]
[3 4]]
[[ 0.25 0. ]
[-0.1875 0.25 ]]
矩阵、逆矩阵计算(会有计算误差)
randMat = np.mat(np.random.rand(3,3))
print(randMat)
invranMat = randMat.I
print(invranMat) # 对randMat矩阵做逆运算
myEye = randMat*invranMat # 应该是一个单位阵,但有一定的计算误差
print(myEye)
myEye - np.eye(3) # 得出误差值
运行结果
[[0.69147751 0.65047686 0.72393914]
[0.47508861 0.59666377 0.06696942]
[0.07256214 0.19897603 0.151861 ]]
[[ 1.65268456 0.9679528 -8.30539972]
[-1.43891214 1.12220742 6.36457846]
[ 1.09565127 -1.93288009 2.21425537]]
[[ 1.00000000e+00 8.80754300e-17 6.81626966e-16]
[-1.33730097e-16 1.00000000e+00 2.19584981e-16]
[-1.07086172e-16 1.27542149e-16 1.00000000e+00]]
matrix([[-1.11022302e-16, 8.80754300e-17, 6.81626966e-16],
[-1.33730097e-16, 2.22044605e-16, 2.19584981e-16],
[-1.07086172e-16, 1.27542149e-16, -1.11022302e-16]])
ndarray的创建
1 随机创建
- [0.0,1.0]浮点型-均匀分布
np.random.rand(2,3) # 创建随机浮点型数组,范围[0-1]
运行结果
array([[0.82953411, 0.02055151, 0.1949628 ],
[0.41322586, 0.79022698, 0.22244829]])
- 整型-均匀分布
# randint(low, high=None, size=None, dtype=int)
np.random.randint(4,size=(2, 2)) # 创建随机整数型数组,前包后不包
np.random.randint(3, 4,size=(2, 2))
np.random.randint(3, 4,(2, 2))
运行结果
array([[0, 1],
[3, 1]])
array([[3, 3],
[3, 3]])
array([[3, 3],
[3, 3]])
- 浮点型-均匀分布
# uniform(low=0.0, high=1.0, size=None)
np.random.uniform(0,1,(3,2))
运行结果
array([[0.31851325, 0.99450262],
[0.43610393, 0.38685498],
[0.24699637, 0.8034744 ]])
- [0,1]浮点型-标准正态分布
np.random.randn(2,3) # 返回具有标准正态分布的序列
运行结果
array([[ 0.92792399, -0.98559607, 0.60592301],
[ 0.19278189, 0.823594 , -0.93083771]])
- 浮点型-正态(高斯)分布
# normal(loc=0.0, scale=1.0, size=None)
# loc : 分布中心
# scale: 标准差
# size : 形状
np.random.normal(3, 1, (2, 3))
运行结果
array([[1.70176164, 3.91084024, 2.67736062],
[4.02143092, 2.20759498, 2.70979432]])
- 随机种子
np.random.seed(3) # 使得同一电脑下程序多次运行时生成的随机数一致
2 序列创建
- 列表转换为数组
# array(object, dtype=None, *, copy=True, order='K', subok=False, ndmin=0)
# object : 序列对象(list) 嵌套序列对象(list of list)
np.array([[1,2,3],[11,12,13]])
运行结果
array([[ 1, 2, 3],
[11, 12, 13]])
- 全0数组
# zeros(shape, dtype=float, order='C')
np.zeros((3,2))
运行结果
array([[0., 0.],
[0., 0.],
[0., 0.]])
- 全1数组
# np.ones(shape, dtype=None, order='C')
np.ones(7)
运行结果
array([1., 1., 1., 1., 1., 1., 1.])
- 单位数组(对角线为1)
# np.eye(N, M=None, k=0, dtype=<class 'float'>, order='C')
np.eye(3,2)
运行结果
array([[1., 0.],
[0., 1.],
[0., 0.]])
- 初始化数组
np.empty((3,2,3)) # 返回给定形状和类型的新数组,而不初始化条目
运行结果
array([[[7.93629587e-313, 5.08887615e-322, 0.00000000e+000],
[0.00000000e+000, 8.45593933e-307, 1.16095484e-028]],
[[5.86679289e+276, 7.89960735e+068, 2.54062776e-076],
[6.09343068e-013, 3.18539647e-120, 1.41171829e-095]],
[[1.14035671e-119, 5.28633943e-085, 3.02259522e-110],
[2.91237123e+257, 4.71294503e+257, 2.60097503e-306]]])
- 类range数组
# arange([start,] stop[, step,], dtype=None)
np.arange(3,9)
np.arange(3,9).reshape(2,3) # 一般与reshape一起使用
运行结果
array([3, 4, 5, 6, 7, 8])
array([[3, 4, 5],
[6, 7, 8]])