当前位置: 首页 > 文档资料 > NumPy 教程 >

线性代数

优质
小牛编辑
135浏览
2023-12-01

此函数返回两个数组的点积。 对于二维向量,其等效于矩阵乘法。 对于一维数组,它是向量的内积。 对于 N 维数组,它是a的最后一个轴上的和与b的倒数第二个轴的乘积。

输出如下:

  1. [[37 40]
  2. [85 92]]

要注意点积计算为:

  1. [[1*11+2*13, 1*12+2*14],[3*11+4*13, 3*12+4*14]]

numpy.vdot()

此函数返回两个向量的点积。 如果第一个参数是复数,那么它的共轭复数会用于计算。 如果参数id是多维数组,它会被展开。

例子

  1. import numpy as np
  2. a = np.array([[1,2],[3,4]])
  3. b = np.array([[11,12],[13,14]])
  4. print np.vdot(a,b)

输出如下:

  1. 130

注意:1*11 + 2*12 + 3*13 + 4*14 = 130

此函数返回一维数组的向量内积。 对于更高的维度,它返回最后一个轴上的和的乘积。

例子

  1. import numpy as np
  2. print np.inner(np.array([1,2,3]),np.array([0,1,0]))
  3. # 等价于 1*0+2*1+3*0

输出如下:

  1. 2

例子

  1. # 多维数组示例
  2. import numpy as np
  3. a = np.array([[1,2], [3,4]])
  4. print '数组 a:'
  5. print a
  6. b = np.array([[11, 12], [13, 14]])
  7. print '数组 b:'
  8. print b
  9. print '内积:'
  10. print np.inner(a,b)

输出如下:

  1. 数组 a:
  2. [[1 2]
  3. [3 4]]
  4. 数组 b:
  5. [[11 12]
  6. [13 14]]
  7. 内积:
  8. [[35 41]

上面的例子中,内积计算如下:

numpy.matmul

另一方面,如果任一参数是一维数组,则通过在其维度上附加 1 来将其提升为矩阵,并在乘法之后被去除。

例子

  1. # 对于二维数组,它就是矩阵乘法
  2. import numpy.matlib
  3. import numpy as np
  4. a = [[1,0],[0,1]]
  5. b = [[4,1],[2,2]]
  6. print np.matmul(a,b)

输出如下:

  1. [[4 1]
  2. [2 2]]

例子

  1. # 二维和一维运算
  2. import numpy.matlib
  3. import numpy as np
  4. a = [[1,0],[0,1]]
  5. b = [1,2]
  6. print np.matmul(a,b)
  7. print np.matmul(b,a)

输出如下:

  1. [1 2]
  2. [1 2]

例子

  1. # 维度大于二的数组
  2. import numpy.matlib
  3. import numpy as np
  4. a = np.arange(8).reshape(2,2,2)
  5. b = np.arange(4).reshape(2,2)
  6. print np.matmul(a,b)

输出如下:

  1. [[[2 3]
  2. [6 11]]
  3. [[10 19]
  4. [14 27]]]

行列式在线性代数中是非常有用的值。 它从方阵的对角元素计算。 对于 2×2 矩阵,它是左上和右下元素的乘积与其他两个的乘积的差。

换句话说,对于矩阵[[a,b],[c,d]],行列式计算为ad-bc。 较大的方阵被认为是 2×2 矩阵的组合。

numpy.linalg.det()函数计算输入矩阵的行列式。

例子

  1. import numpy as np
  2. a = np.array([[1,2], [3,4]])
  3. print np.linalg.det(a)

输出如下:

  1. -2.0

例子

  1. [[ 6 1 1]
  2. [ 4 -2 5]
  3. [ 2 8 7]]
  4. -306.0
  5. -306

numpy.linalg.solve()

numpy.linalg.solve()函数给出了矩阵形式的线性方程的解。

考虑以下线性方程:

  1. x + y + z = 6
  2. 2y + 5z = -4
  3. 2x + 5y - z = 27

可以使用矩阵表示为:

如果矩阵成为A、和B,方程变为:

  1. AX = B

  1. X = A^(-1)B

我们使用numpy.linalg.inv()函数来计算矩阵的逆。 矩阵的逆是这样的,如果它乘以原始矩阵,则得到单位矩阵。

例子

  1. import numpy as np
  2. y = np.linalg.inv(x)
  3. print x
  4. print y
  5. print np.dot(x,y)

输出如下:

  1. [[1 2]
  2. [3 4]]
  3. [[-2. 1. ]
  4. [ 1.5 -0.5]]
  5. [[ 1.00000000e+00 1.11022302e-16]
  6. [ 0.00000000e+00 1.00000000e+00]]

例子

现在让我们在示例中创建一个矩阵A的逆。

  1. import numpy as np
  2. a = np.array([[1,1,1],[0,2,5],[2,5,-1]])
  3. print '数组 a:'
  4. print a
  5. ainv = np.linalg.inv(a)
  6. print 'a 的逆:'
  7. print ainv
  8. print '矩阵 b:'
  9. b = np.array([[6],[-4],[27]])
  10. print b
  11. print '计算:A^(-1)B:'
  12. x = np.linalg.solve(a,b)
  13. print x
  14. # 这就是线性方向 x = 5, y = 3, z = -2 的解

输出如下:

  1. 数组 a:
  2. [[ 1 1 1]
  3. [ 0 2 5]
  4. [ 2 5 -1]]
  5. a 的逆:
  6. [[ 1.28571429 -0.28571429 -0.14285714]
  7. [-0.47619048 0.14285714 0.23809524]
  8. [ 0.19047619 0.14285714 -0.0952381 ]]
  9. 矩阵 b:
  10. [[ 6]
  11. [-4]
  12. [27]]
  13. 计算:A^(-1)B:
  14. [[ 5.]
  15. [ 3.]

结果也可以使用下列函数获取