文章目录
使用
np.info(fun)
可以查看某个函数的文档信息
1. 创建单位矩阵
np.eye()
>>> np.eye(3) #单位矩阵肯定是方阵
array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]])
区别于 np.ones()
>>> np.ones((3,3))
array([[1., 1., 1.],
[1., 1., 1.],
[1., 1., 1.]])
2. 对角阵
np.diag()
>>> x = np.arange(9).reshape((3,3))
>>> x
array([[0, 1, 2],
[3, 4, 5],
[6, 7, 8]])
>>> np.diag(x)
array([0, 4, 8])
>>> np.diag(x, k=1) #对角线往上一行
array([1, 5])
>>> np.diag(x, k=-1) #对角线往下一行
array([3, 7])
>>> np.diag(np.diag(x)) #用一维数组构造对角阵
array([[0, 0, 0],
[0, 4, 0],
[0, 0, 8]])
3. 提取整数部分
-
np.floor()
,按在坐标轴位置的左边取>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) >>> np.floor(a) array([-2., -2., -1., 0., 1., 1., 2.])
-
np.ceil()
,按在坐标轴位置的右边取>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) >>> np.ceil(a) array([-1., -1., -0., 1., 2., 2., 2.])
如果是整数,上面两种方法的结果一样
-
np.trunc()
直接去掉小数点右部分>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) >>> np.trunc(a) array([-1., -1., -0., 0., 1., 1., 2.])
-
np.rint()
,小于0的按在坐标轴位置的左边取,大于0的按在坐标轴位置的右边取>>> a = np.array([-1.7, -1.5, -0.2, 0.2, 1.5, 1.7, 2.0]) >>> np.rint(a) array([-2., -2., -0., 0., 2., 2., 2.])
4. 通过迭代器创建数组
np.fromiter(iterable, dtype)
>>> iterable = (x*x for x in range(5)) #生成器是特殊的迭代器
>>> np.fromiter(iterable, float)
array([ 0., 1., 4., 9., 16.])
5. 创建从start~stop范围的指定数目的数组
np.linspace(start,stop, endpoint=True, retstep=False, dtype)
>>> np.linspace(2.0, 3.0, num=5)
array([2. , 2.25, 2.5 , 2.75, 3. ])
>>> np.linspace(2.0, 3.0, num=5, endpoint=False) #endpoint判断最后一个数是否是stop
array([2. , 2.2, 2.4, 2.6, 2.8])
>>> np.linspace(2.0, 3.0, num=5, retstep=True) #retstep:是否把步长step打印出来
(array([2. , 2.25, 2.5 , 2.75, 3. ]), 0.25)
6. 判断两个数组是否相等
np.allclose(A,B)
>>> np.allclose([1e10,1e-7], [1.00001e10,1e-8])
False
>>> np.allclose([1e10,1e-8], [1.00001e10,1e-9])
True
>>> np.allclose([1e10,1e-8], [1.0001e10,1e-9])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan])
False
>>> np.allclose([1.0, np.nan], [1.0, np.nan], equal_nan=True)
True
equal_nan
表示是否认为 np.nan是相等的。np.nan表示 not a number
-
np.array_equal(A,B)
>>> np.array_equal([1, 2], [1, 2]) True >>> np.array_equal(np.array([1, 2]), np.array([1, 2])) True >>> np.array_equal([1, 2], [1, 2, 3]) #形状不同直接返回False False >>> np.array_equal([1, 2], [1, 4]) False >>> a = np.array([1, np.nan]) >>> np.array_equal(a, a) False >>> np.array_equal(a, a, equal_nan=True) #与np.allclose()类似 True
7. 取出唯一的数据
np.unique()
>>> np.unique([1, 1, 2, 2, 3, 3])
array([1, 2, 3])
>>> a = np.array([[1, 1], [2, 3]])
>>> np.unique(a)
array([1, 2, 3])
令参数axis=0
:返回唯一的行
>>> a = np.array([[1, 0, 0], [1, 0, 0], [2, 3, 4]])
>>> np.unique(a, axis=0)
array([[1, 0, 0], [2, 3, 4]])
参数return_index
表示是否返回取出的数据在原数组的位置
>>> a = np.array(['a', 'b', 'b', 'c', 'a'])
>>> u, indices = np.unique(a, return_index=True) #返回一个元组
>>> u
array(['a', 'b', 'c'], dtype='<U1')
>>> indices #新数组的元素在原数组的位置,重复的取最前一个
array([0, 1, 3])
>>> a[indices] #由原数组获得新数组
array(['a', 'b', 'c'], dtype='<U1')
参数 return_inverse
表示是否返回原数组的数据在新数组(取出的含有唯一数据的数组)的位置
Reconstruct the input array from the unique values:
>>> a = np.array([1, 2, 6, 4, 2, 3, 2])
>>> u, indices = np.unique(a, return_inverse=True) #返回一个元组
>>> u #新数组,含有唯一数据
array([1, 2, 3, 4, 6])
>>> indices #原数组的元素在新数组的位置
array([0, 1, 4, 3, 1, 2, 1])
>>> u[indices] # 由新数组获得原数组
array([1, 2, 6, 4, 2, 3, 2])
8. 颠倒一个数据的真假性
np.logical_not()
>>> np.logical_not(3)
False
>>> np.logical_not([True, False, 0, 1])
array([False, True, True, False])
>>> x = np.arange(5)
>>> np.logical_not(x<3)
array([False, False, False, True, True])
9. 矩阵运算
-
求逆矩阵
np.linalg.inv(A)
-
求矩阵的行列式值:
np.linalg.det(A)
-
求矩阵的特征值和特征向量:
np.linalg.eig(A)
-
求解线性方程组:
#线性方程组 Ax = B 求解 A= np.array([ [3,1], [1,2] ]) B= np.array([9,8]) x = np.linalg.solve(A,B) x
-
矩阵转置:
A.T
(A为一个矩阵)