ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

HoRain云--NumPy 线性代数

HoRain云--NumPy 线性代数 NumPy 提供了线性代数函数库linalg该库包含了线性代数所需的所有功能可以看看下面的说明函数描述dot两个数组的点积即元素对应相乘。vdot两个向量的点积inner两个数组的内积matmul两个数组的矩阵积determinant数组的行列式solve求解线性矩阵方程inv计算矩阵的乘法逆矩阵numpy.dot()numpy.dot() 对于两个一维的数组计算的是这两个数组对应下标元素的乘积和(数学上称之为向量点积)对于二维数组计算的是两个数组的矩阵乘积对于多维数组它的通用计算公式如下即结果数组中的每个元素都是数组a的最后一维上的所有元素与数组b的倒数第二位上的所有元素的乘积和 dot(a, b)[i,j,k,m] sum(a[i,j,:] * b[k,:,m])。numpy.dot(a, b, outNone)参数说明a: ndarray 数组b: ndarray 数组out: ndarray, 可选用来保存dot()的计算结果实例import numpy.matlib import numpy as np a np.array([[1,2],[3,4]]) b np.array([[11,12],[13,14]]) print(np.dot(a,b))输出结果为[[37 40] [85 92]]计算式为[[1*112*13, 1*122*14],[3*114*13, 3*124*14]]numpy.vdot()numpy.vdot() 函数是两个向量的点积。 如果第一个参数是复数那么它的共轭复数会用于计算。 如果参数是多维数组它会被展开。实例import numpy as np a np.array([[1,2],[3,4]]) b np.array([[11,12],[13,14]]) # vdot 将数组展开计算内积 print (np.vdot(a,b))输出结果为130计算式为1*11 2*12 3*13 4*14 130numpy.inner()numpy.inner() 函数返回一维数组的向量内积。对于更高的维度它返回最后一个轴上的和的乘积。实例import numpy as np print (np.inner(np.array([1,2,3]),np.array([0,1,0]))) # 等价于 1*02*13*0输出结果为2多维数组实例import numpy as np a np.array([[1,2], [3,4]]) print (数组 a) print (a) b np.array([[11, 12], [13, 14]]) print (数组 b) print (b) print (内积) print (np.inner(a,b))输出结果为数组 a [[1 2] [3 4]] 数组 b [[11 12] [13 14]] 内积 [[35 41] [81 95]] 数组 a [[1 2] [3 4]] 数组 b [[11 12] [13 14]] 内积 [[35 41] [81 95]]内积计算式为1*112*12, 1*132*14 3*114*12, 3*134*14numpy.matmulnumpy.matmul 函数返回两个数组的矩阵乘积。 虽然它返回二维数组的正常乘积但如果任一参数的维数大于2则将其视为存在于最后两个索引的矩阵的栈并进行相应广播。另一方面如果任一参数是一维数组则通过在其维度上附加 1 来将其提升为矩阵并在乘法之后被去除。对于二维数组它就是矩阵乘法实例import numpy.matlib import numpy as np a [[1,0],[0,1]] b [[4,1],[2,2]] print (np.matmul(a,b))输出结果为[[4 1] [2 2]]二维和一维运算实例import numpy.matlib import numpy as np a [[1,0],[0,1]] b [1,2] print (np.matmul(a,b)) print (np.matmul(b,a))输出结果为[1 2] [1 2]维度大于二的数组 实例import numpy.matlib import numpy as np a np.arange(8).reshape(2,2,2) b np.arange(4).reshape(2,2) print (np.matmul(a,b))输出结果为[[[ 2 3] [ 6 11]] [[10 19] [14 27]]]numpy.linalg.det()numpy.linalg.det() 函数计算输入矩阵的行列式。行列式在线性代数中是非常有用的值。 它从方阵的对角元素计算。 对于 2×2 矩阵它是左上和右下元素的乘积与其他两个的乘积的差。换句话说对于矩阵[[ab][cd]]行列式计算为 ad-bc。 较大的方阵被认为是 2×2 矩阵的组合。实例import numpy as np a np.array([[1,2], [3,4]]) print (np.linalg.det(a))输出结果为-2.0实例import numpy as np b np.array([[6,1,1], [4, -2, 5], [2,8,7]]) print (b) print (np.linalg.det(b)) print (6*(-2*7 - 5*8) - 1*(4*7 - 5*2) 1*(4*8 - -2*2))输出结果为[[ 6 1 1] [ 4 -2 5] [ 2 8 7]] -306.0 -306numpy.linalg.solve()numpy.linalg.solve() 函数给出了矩阵形式的线性方程的解。考虑以下线性方程x y z 6 2y 5z -4 2x 5y - z 27可以使用矩阵表示为如果矩阵成为A、X和B方程变为AX B 或 X A^(-1)Bnumpy.linalg.inv()numpy.linalg.inv() 函数计算矩阵的乘法逆矩阵。逆矩阵inverse matrix设A是数域上的一个n阶矩阵若在相同数域上存在另一个n阶矩阵B使得 ABBAE 则我们称B是A的逆矩阵而A则被称为可逆矩阵。注E为单位矩阵。实例import numpy as np x np.array([[1,2],[3,4]]) y np.linalg.inv(x) print (x) print (y) print (np.dot(x,y))输出结果为[[1 2] [3 4]] [[-2. 1. ] [ 1.5 -0.5]] [[1.0000000e00 0.0000000e00] [8.8817842e-16 1.0000000e00]]现在创建一个矩阵A的逆矩阵:实例import numpy as np a np.array([[1,1,1],[0,2,5],[2,5,-1]]) print (数组 a) print (a) ainv np.linalg.inv(a) print (a 的逆) print (ainv) print (矩阵 b) b np.array([[6],[-4],[27]]) print (b) print (计算A^(-1)B) x np.linalg.solve(a,b) print (x) # 这就是线性方向 x 5, y 3, z -2 的解输出结果为数组 a [[ 1 1 1] [ 0 2 5] [ 2 5 -1]] a 的逆 [[ 1.28571429 -0.28571429 -0.14285714] [-0.47619048 0.14285714 0.23809524] [ 0.19047619 0.14285714 -0.0952381 ]] 矩阵 b [[ 6] [-4] [27]] 计算A^(-1)B [[ 5.] [ 3.] [-2.]]结果也可以使用以下函数获取x np.dot(ainv,b)
返回列表