Python 将不同形状乘以 numpy 点积
Python Multiplication different shape to numpy dot product
我正在尝试理解 python 乘法运算符。我一直假设它在执行以下操作时执行点积
a * b
然而,下面的例子表明产生了不同的形状。
a = np.random.random((3, 3))
b = np.array([1,0,1])
乘法运算符:
(a*b).shape
(3, 3)
Numpy 点积:
np.dot(a,b).shape
(3,)
乘法运算符在做什么数学运算?
import numpy as np
a = np.random.randint(3, size=(3, 3))
Out[1]:
(A) [[0 1 1]
[0 2 2]
[0 1 0]]
b = np.array([1,0,2])
Out[2]:
(B) [1 0 2]
所以在 a*b 运算中,它进行逐元素乘法。因为尺寸不匹配,所以 "broadcast",并应用外推的 "b" 而不是真实的 "b".
(A)[[0 1 1] (B)[[1 0 2] [[0 0 2] # [0x0, 1x0, 1x2] and so on
[0 2 2] * [1 0 2] = [0 0 4]
[0 1 0]] [1 0 2]] [0 0 0]]
另一方面,np.dot 为您提供矩阵乘法:
(A)[[0 1 1] (B)[[1] [[2] # [0x1 + 1x0 + 1x2 = 2] and so on
[0 2 2] X [0] = [4]
[0 1 0]] [2]] [0]]
一个普遍的答案是 python 乘法运算符根据其应用的对象有不同的行为。
numpy
对象是 不是 python 原始类型。 numpy
重新定义了乘法运算符的行为。
根据numpy
documentation:
arithmetic operators on arrays apply elementwise
进一步阅读文档您会得到答案:
Unlike in many matrix languages, the product operator * operates elementwise in NumPy arrays. The matrix product can be performed using the @ operator (in python >=3.5) or the dot function or method
我正在尝试理解 python 乘法运算符。我一直假设它在执行以下操作时执行点积
a * b
然而,下面的例子表明产生了不同的形状。
a = np.random.random((3, 3))
b = np.array([1,0,1])
乘法运算符:
(a*b).shape
(3, 3)
Numpy 点积:
np.dot(a,b).shape
(3,)
乘法运算符在做什么数学运算?
import numpy as np
a = np.random.randint(3, size=(3, 3))
Out[1]:
(A) [[0 1 1]
[0 2 2]
[0 1 0]]
b = np.array([1,0,2])
Out[2]:
(B) [1 0 2]
所以在 a*b 运算中,它进行逐元素乘法。因为尺寸不匹配,所以 "broadcast",并应用外推的 "b" 而不是真实的 "b".
(A)[[0 1 1] (B)[[1 0 2] [[0 0 2] # [0x0, 1x0, 1x2] and so on
[0 2 2] * [1 0 2] = [0 0 4]
[0 1 0]] [1 0 2]] [0 0 0]]
另一方面,np.dot 为您提供矩阵乘法:
(A)[[0 1 1] (B)[[1] [[2] # [0x1 + 1x0 + 1x2 = 2] and so on
[0 2 2] X [0] = [4]
[0 1 0]] [2]] [0]]
一个普遍的答案是 python 乘法运算符根据其应用的对象有不同的行为。
numpy
对象是 不是 python 原始类型。 numpy
重新定义了乘法运算符的行为。
根据numpy
documentation:
arithmetic operators on arrays apply elementwise
进一步阅读文档您会得到答案:
Unlike in many matrix languages, the product operator * operates elementwise in NumPy arrays. The matrix product can be performed using the @ operator (in python >=3.5) or the dot function or method