numpy乘积运算

本文通过例子,对matrix/array格式的乘积运算进行总结。

1.关于乘积的三种操作

  • *
  • @
  • np.dot()
  • np.multiply()

2.一维matrix/array

 m,n=np.array([1,2]),np.array([2,3])
 a,b=np.mat([1,2]),np.mat([2,3])

2.1 使用*

 m*n
 Out: array([2, 6])
 
 a*b
 Out: ValueError: shapes (1,2) and (1,2) not aligned: 2 (dim 1) != 1 (dim 0)
 
 a*b.T
 Out: matrix([[8]])

在matrix格式,*出现了维度不匹配的问题,这是因为二者与我们通常理解的矩阵乘法是一致的。因此需要使用转置来解决。np.dot()也有类似情况,不再细述。

2.2 使用@

m @ n
#Out: 8 # type:numpy.int32

a @ b
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 1 is different from 2)

a @ b.T
Out: matrix([[8]])

在matrix格式,@出现了维度不匹配的问题,这是因为二者与我们通常理解的矩阵乘法是一致的。因此需要使用转置来解决。*运算也有类似情况,不再细述。

2.3 使用np.dot()

np.dot(m,n)
Out: 8

np.dot(a,b.T)
Out: matrix([[8]])

2.4 使用np.multiply()

 np.multiply(m,n)
 Out: array([2, 6])
 np.multiply(a,b)
 Out: matrix([[2, 6]])

3.多维matrix/array

以二维为例:

 m,n=np.array([[1,2],[2,3]]),np.array([[1,0],[2,1]])
 a,b=np.mat([[1,2],[2,3]]),np.mat([[1,0],[2,1]])

3.1 使用*

m*n
#Out: 
array([[1, 0],
       [4, 3]])
       
a*b
#Out: 
matrix([[5, 2],
        [8, 3]])

3.2 使用@

m @ n
#Out: 
array([[5, 2],
       [8, 3]])
       
a @ b
#Out: 
matrix([[5, 2],
        [8, 3]])

3.3 使用np.dot()

np.dot(m,n)
#Out: 
array([[5, 2],
       [8, 3]])
       
np.dot(a,b)
#Out: 
matrix([[5, 2],
        [8, 3]])

3.4 使用np.multiply()

np.multiply(m,n)
#Out: 
array([[1, 0],
       [4, 3]])

np.multiply(a,b)
#Out: 
matrix([[1, 0],
        [4, 3]])

可见对于多维数组,np.dot()和np.multiply()运算结果在数值上是相同的。

总结如下:

类型/运算*@np.dot()np.multiply()
一维np.array对应位置元素相乘内积形式内积形式对应位置元素相乘
一维np.mat通常理解的矩阵乘法通常理解的矩阵乘法通常理解的矩阵乘法对应位置元素相乘
多维np.array对应位置元素相乘通常理解的矩阵乘法通常理解的矩阵乘法对应位置元素相乘
多维np.mat通常理解的矩阵乘法通常理解的矩阵乘法通常理解的矩阵乘法对应位置元素相乘

可见 np.dot()与@算子是等价的。

参考文献

[1] numpy.dot

### 使用 NumPy 进行矩阵运算 #### 导入库 为了使用 NumPy 的强大功能,首先需要导入该库。这可以通过简单的 `import` 语句完成[^1]。 ```python import numpy as np ``` #### 创建矩阵 可以利用多种方式来创建不同类型的矩阵。对于普通的二维数组形式的矩阵来说: ```python matrix_a = np.array([[1, 2], [3, 4]]) print(matrix_a) ``` 除了整数值外,还可以构建含有浮点数或其他数据类型的数组[^3]。 #### 基本矩阵运算 ##### 加法 两个相同大小的矩阵可以直接相加以得到一个新的矩阵。 ```python matrix_b = np.array([[5, 6], [7, 8]]) addition_result = matrix_a + matrix_b print(addition_result) ``` ##### 乘法 有两种主要的方式来进行矩阵间的乘法操作——逐元素乘积以及标准意义上的矩阵乘法(即内积)。前者可通过简单的星号(*)实现;后者则需调用专门的方法如 `dot()` 或者使用 @ 符号。 ```python element_wise_product = matrix_a * matrix_b matrix_multiplication = matrix_a.dot(matrix_b) # Alternatively using the '@' operator introduced in Python 3.5+ matrix_mult_alternative = matrix_a @ matrix_b print(element_wise_product) print(matrix_multiplication) print(matrix_mult_alternative) ``` ##### 转置 获取给定矩阵的转置版本很容易做到,只需访问 `.T` 属性即可获得原矩阵各维度顺序颠倒后的视图对象。 ```python transposed_matrix = matrix_a.T print(transposed_matrix) ``` #### 高级特性 NumPy 支持更复杂的线性代数计算,比如求解逆矩阵、特征值分解等,在科学计算领域有着广泛的应用价值[^2]。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

外卖猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值