import numpy as np a = np.array(['a','b','c','d','e']) b = np.array([12, 90, 380, 12, 211]) ind = np.lexsort((a,b)) #打印排序元素的索引数组 print(ind) #使用索引数组对数组进行排序 for i in ind: print(a[i],b[i])
搜索
NumPy 提供了许多可以在数组内执行搜索功能的函数。
numpy.nonzero()
该函数从数组中查找非零元素的索引位置
1 2 3 4 5
import numpy as np b = np.array([12, 90, 380, 12, 211]) print("原数组b",b) print("打印非0元素的索引位置") print(b.nonzero())
numpy.where()
numpy.where() 的返回值是满足了给定条件的元素索引值。
1 2 3 4 5
import numpy as np b = np.array([12, 90, 380, 12, 211]) print(np.where(b>12)) c = np.array([[20, 24],[21, 23]]) print(np.where(c>20))
赋值操作是数组引用的一种方法。比如,将 a 数组赋值给变量 b,被赋值后的变量 b 与 a 组具有相同的内存 id。因此,无论操作 a、b 中哪个数组,另一个数组也会受到影响。例如下:
1 2 3 4 5 6 7 8 9
import numpy as np a = np.array([[1,2,3,4],[9,0,2,3],[1,2,3,19]]) print("原数组",a) print("a数组的ID:",id(a)) b = a print("数组b的id:",id(b)) b.shape = 4,3; print("b数组形状的更改也会反映到a数组上:") print(a)
inner() 函数的计算过程是 A 数组的每一行与 B 数组的每一行相乘再相加,如下所示: [[11+210 13+104 ] [1001+10002 1003+10004]]dot() 则表示是 A 数组每一行与 B 数组的每一列相乘。
numpy.matmul()
该函数返回两个矩阵的乘积,假如两个矩阵的维度不一致,就会产生错误。
1 2 3 4 5
import numpy as np a = np.array([[1,2,3],[4,5,6],[7,8,9]]) b = np.array([[23,23,12],[2,1,2],[7,8,9]]) mul = np.matmul(a,b) print(mul)
numpy.linalg.det()
该函数使用对角线元素来计算矩阵的行列式,计算 2*2(两行两列) 的行列式,示例如下:
[[1,2], [3,4]]
通过对角线元素求行列式的结果(口诀:“一撇一捺”计算法):
14-23=-2
我们可以使用 numpy.linalg.det() 函数来完成计算。示例如下:
1 2 3
import numpy as np a = np.array([[1,2],[3,4]]) print(np.linalg.det(a))
numpy.linalg.solve()
该函数用于求解线性矩阵方程组,并以矩阵的形式表示线性方程的解,如下所示:
1 2 3
3X + 2 Y + Z = 10 X + Y + Z = 6 X + 2Y - Z = 2
首先将上述方程式转换为矩阵的表达形式:
方程系数矩阵: 3 2 1 1 1 1 1 2 -1 方程变量矩阵: X Y Z 方程结果矩阵: 10 6 2
如果用 m 、x、n 分别代表上述三个矩阵,其表示结果如下:m*x=n 或 x=n/m
将系数矩阵与结果矩阵传递给 numpy.solve() 函数,即可求出线程方程的解,如下所示:
1 2 3 4 5 6 7 8 9 10
import numpy as np m = np.array([[3,2,1],[1,1,1],[1,2,-1]]) print ('数组 m:') print (m) print ('矩阵 n:') n = np.array([[10],[6],[2]]) print (n) print ('计算:m^(-1)n:') x = np.linalg.solve(m,n) print (x)
numpy.linalg.inv()
该函数用于计算矩阵的逆矩阵,逆矩阵与原矩阵相乘得到单位矩阵。示例如下:
1 2 3 4 5
import numpy as np a = np.array([[1,2],[3,4]]) print("原数组:",a) b = np.linalg.inv(a) print("求逆:",b)
NumPy矩阵乘法
矩阵乘法是将两个矩阵作为输入值,并将 A 矩阵的行与 B 矩阵的列对应位置相乘再相加,从而生成一个新矩阵,如下图所示: 注意:必须确保第一个矩阵中的行数等于第二个矩阵中的列数,否则不能进行矩阵乘法运算。
矩阵乘法运算被称为向量化操作,向量化的主要目的是减少使用的 for 循环次数或者根本不使用。这样做的目的是为了加速程序的计算。下面介绍 NumPy 提供的三种矩阵乘法,从而进一步加深对矩阵乘法的理解。
逐元素矩阵乘法 multiple() 函数用于两个矩阵的逐元素乘法,示例如下:
1 2 3 4 5
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.multiply(array1,array2) result
矩阵乘积运算
matmul() 用于计算两个数组的矩阵乘积。示例如下:
1 2 3 4 5
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.matmul(array1,array2) print(result)
矩阵点积
dot() 函数用于计算两个矩阵的点积。如下所示:
1 2 3 4 5
import numpy as np array1=np.array([[1,2,3],[4,5,6],[7,8,9]],ndmin=3) array2=np.array([[9,8,7],[6,5,4],[3,2,1]],ndmin=3) result=np.dot(array1,array2) print(result)