当前位置:   article > 正文

Numpy中的矩阵运算_numpy 矩阵运算

numpy 矩阵运算

一、Matrix和Array

        Matrix名为矩阵,Array名为阵列,它们都可以作为矩阵运算的结构,功能上Matrix是Array的子集,Matrix运算符相较于Array简单。本文章主要讲解Numpy中的Matrix和Array关于矩阵运算的区别,代码部分已经给出了运算结果,大家仔细体会就明白了。

二、Matrix和Array的相互转换

  1. import numpy as np
  2. a = [1, 2, 3]
  3. b = [2, 3, 4]
  4. c = [[1], [2], [3]]
  5. print(type(a)) # list
  6. print(np.mat(a)) # [[1 2 3]]
  7. print(type(np.mat(a))) # matrix:注意是二维
  1. print(np.array(a)) # [1 2 3]
  2. print(type(np.array(a))) # ndarray
print(type(np.mat(np.array(a)))) #matrix

三、矩阵乘法--multiply()、dot()、 matmul()、' * '、'@'辨析

注意:所有的一维向单独看时,都当成是列向量(竖着放的),虽然打印的时候是横着放!!!

元素相乘:multply()
矩阵相乘:dot()、matmul()、’@’
’ * ': 在数组操作中,作为元素相乘;在矩阵操作中作为矩阵相乘

在数组Array上操作

  1. a1 = np.array([[1,2,3],[4,5,6]])
  2. b1 = np.array([1,2,3])
  3. a2 = np.array([1,2,3])
  4. b2 = np.array([1,2,3])
  5. a1 * b1 # 对应元素相乘
  6. [[ 1 4 9]
  7. [ 4 10 18]]
  8. a1 @ b1 # 矩阵相乘
  9. [14 32]
  10. a2 * b2 # 对应元素相乘
  11. [1 4 9]
  12. a2 @ b2 # 矩阵相乘
  13. 14
  14. np.multiply(a1, b1), np.multiply(a2, b2) # 对应元素相乘
  15. (array([[ 1, 4, 9],
  16. [ 4, 10, 18]]), array([1, 4, 9]))
  17. np.dot(a1, b1), np.dot(a2, b2) # 矩阵相乘
  18. (array([14, 32]), 14)
  19. np.matmul(a1, b1), np.matmul(a2, b2) # 矩阵相乘
  20. (array([14, 32]), 14)

在矩阵上操作

  1. a3 = np.matrix([[1,2,3],[4,5,6]])
  2. b3_1 = np.matrix([1,2,3])
  3. b3 = np.matrix([[1],[2],[3]])
  4. a3 * b3 # 矩阵相乘
  5. [[14]
  6. [32]]
  7. a3 @ b3 # 矩阵相乘
  8. [[14]
  9. [32]]
  10. np.multiply(a3,b3_1) # 对应元素相乘
  11. matrix([[ 1, 4, 9],
  12. [ 4, 10, 18]])
  13. np.dot(a3, b3) # 矩阵相乘
  14. matrix([[14],
  15. [32]])
  16. np.matmul(a3, b3) # 矩阵相乘
  17. matrix([[14],
  18. [32]])

四、矩阵的转置和逆

  关键点:注意矩阵是否可逆

  1. # 转置
  2. print(np.mat(a).T)
  3. print(np.array(a).T)
  4. # Matrix的逆为:
  5. A = [[1, 2], [3, 4]]
  6. print(np.mat(A).I)
  7. # Array的逆为:
  8. print(np.linalg.inv(A))

五、关于shape和一维向量

例如:a,b的shape为 (3, ),计算 a*b
关键就在这一步的转换,此处有两个向量相乘,那么:
谁在左边,就在左边添加维度1:a 在左,那么 a 的 shape 运算时为 (1,3)
谁在右边,就在右边添加维度1:b 在右,那么 b 的 shape 运算时为 (3,1)

  1. a = np.array([[1, 2, 3], [4, 5, 6]]) # (2, 3)
  2. b = np.array([1, 2, 3]) # (3,)
  3. print(a.dot(b)) # [14 32] (2,3)* (3,1) -> (2,1)
  4. print(np.matmul(a, b)) # [14 32] (2,3)* (3,1) -> (2,1)
  5. # 如果是 b.dot(a)
  6. # b 在左, (1, 3) * (2, 3) 报错
  7. # 如果把 a 换成 (3,2),就可以运算

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/2023面试高手/article/detail/679072
推荐阅读
相关标签
  

闽ICP备14008679号