numpy简介
什么是numpy
NumPy是Python中科学计算的基础包。它是一个Python库,提供多维数组对象,各种派生对象(如掩码数组和矩阵),以及用于数组快速操作的各种API,有包括数学、逻辑、形状操作、排序、选择、输入输出、离散傅立叶变换、基本线性代数,基本统计运算和随机模拟等等。
numpy的应用
NumPy 通常与 SciPy(Scientific Python)和 Matplotlib(绘图库)一起使用, 这种组合广泛用于替代MatLab,是一个强大的科学计算环境,有助于我们通过 Python 学习数据科学或者机器学习。
ndarray
numpy的ndarray对象,别名叫做array。需要注意的是,numpy.array≠array.array,后者是python标准库的对象,只能处理一维数组对象且功能较少。
- ndarray的属性
属性名 | 描述 |
---|---|
ndarray.ndim | n dimension,即array的维度数,也称作rank |
ndarray.shape | 即数组的维度,返回一个整数元组,如二维数组(m,n) |
ndarray.size | 数组元素的个数,相当于shape元素的成绩 |
ndarray.dtype | 描述数组中元素类型的对象 |
- 例子
>>> import numpy as np
>>> num=np.array([[1,2,3],[4,5,6]])
>>> num.ndim
2
>>> num.shape
(2, 3)
>>> num.size
6
zeros
用于创建一个0矩阵。
>>> s=np.zeros((5,2))
>>> s
array([[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.],
[0., 0.]])
ones
类似于zeros,创建的是全1矩阵。
arrange
用于创建一维数组
- ndarray.arrange(first,end,len),区间为[first,end],步长len。
- ndarray.arrange(num),创建的数组为0,1,2……num-1。
>>> np.arange(0,5,2)
array([0, 2, 4])
>>> np.arange(5)
array([0, 1, 2, 3, 4])
reshape
用于改变矩阵的维度。
>>> num=num.reshape(2,3)
>>> num
array([[1, 2, 3],
[4, 5, 6]])
>>> num=num.reshape(6)
>>> num
array([1, 2, 3, 4, 5, 6])
max,min和sum
>>> print(a.dot(b))
[[10 13]
[28 40]]
>>> print(a)
[[0 1 2]
[3 4 5]]
>>> a.sum()
15
>>> a.min()
0
>>> a.max()
5
矩阵乘法
array中,*表示元素内的运算,而不是矩阵乘法,乘法用@或dot函数替代
>>> a=np.arange(6).reshape(2,3)
>>> b=np.arange(6).reshape(3,2)
>>> print(a)
[[0 1 2]
[3 4 5]]
>>> print(2*a)
[[ 0 2 4]
[ 6 8 10]]
>>> print(a@b)
[[10 13]
[28 40]]
>>> print(a.dot(b))
[[10 13]
[28 40]]
axis参数
指定操作的轴
>>> b
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]])
>>>
>>> b.sum(axis=0) # sum of each column
array([12, 15, 18, 21])
>>>
>>> b.min(axis=1) # min of each row
array([0, 4, 8])
转置矩阵
常用的方法是访问array的T属性。
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> a.T
array([[0, 3],
[1, 4],
[2, 5]])
单位矩阵
- 可以用identity或eye
>>> np.identity(2)
array([[1., 0.],
[0., 1.]])
>>> np.eye(2)
array([[1., 0.],
[0., 1.]])
- 也可以采用对角矩阵的diag生成法
>>> np.diag([1]*2)
array([[1, 0],
[0, 1]])
矩阵堆叠
- hstack横向堆叠
- vstack纵向堆叠
>>> a=np.array([0,1,2])
>>> b=np.array([3,4,5])
>>> np.hstack((a,b))
array([0, 1, 2, 3, 4, 5])
>>> np.vstack((a,b))
array([[0, 1, 2],
[3, 4, 5]])
矩阵分割
把矩阵等分
- hsplit横向分割
- vsplit纵向分割
>>> a
array([[0, 1, 2],
[3, 4, 5]])
>>> np.hsplit(a,3)
[array([[0],
[3]]), array([[1],
[4]]), array([[2],
[5]])]
>>> np.vsplit(a,2)
[array([[0, 1, 2]]), array([[3, 4, 5]])]
linalg
linalg.det
计算矩阵的行列式:numpy.linalg.det(a)
solve
numpy.linalg.solve(a,b)用于求解线性矩阵方程
>>> b=np.array([4]).reshape(1,1)
>>> a=np.array([2]).reshape(1,1)
>>> np.linalg.solve(a,b)
array([[2.]])
inv
numpy.linalg.inv(a)求矩阵的逆
>>> a=([[1,2],[2,1]])
>>> b=np.linalg.inv(a)
>>> a@b
array([[1., 0.],
[0., 1.]])