[英]Numpy dotproduct weird behaviour
我正在使用python3.5,但我有一個問題:為什么np.dot()的行為如此?
>> a = np.array([[1,2,3,4]])
>> b = np.array([123])
>> np.dot(a,b)
Traceback (most recent call last):
File "<input>", line 1, in <module>
ValueError: shapes (1,4) and (1,) not aligned: 4 (dim 1) != 1 (dim 0)
>>np.dot(b,a)
array([123, 246, 369, 492])
從help(np.dot)
,我們知道np.dot(x,y)
是x
的最后一個軸和y
的倒數第二個乘積。
在的情況下np.dot(a, b)
最后軸線a
是4和唯一的軸的長度b
是1。它們不匹配:失敗。
在np.dot(b, a)
的情況下, np.dot(b, a)
的最后一個軸為1, b
的倒數第二a
為1。它們匹配:成功。
根據您對np.dot(a,b)
意圖,您可能需要:
>>> np.dot(a, np.resize(b,a.shape[-1]))
array([1230])
從numpy.dot(x, y)
的文檔中:
對於2-D數組,它等效於矩陣乘法,對於1-D數組,其等效於向量的內積...對於N維,它是
x
的最后一個軸和y
的倒數第二個和的乘積:
因此,您在哪里:
a = np.array([[1,2,3,4]]) # shape is (1, 4), 2-D array (matrix)
b = np.array([123]) # shape is (1,), 1-D array (vector)
np.dot(b, a)
起作用( (1,) * (1, 4)
,相關尺寸一致) np.dot(a, b)
不( (1, 4) * (1,)
,相關尺寸不一致,操作不確定。請注意(1,)
“倒數第二個”軸(1,)
對應於它的唯一軸) 這與具有兩個二維數組(即矩陣)的行為相同:
a = np.array([[1,2,3,4]]) # shape is (1, 4)
b = np.array([[123]]) # shape is (1, 1)
np.dot(b, a)
起作用( (1, 1) * (1, 4)
,內部矩陣尺寸一致) np.dot(a, b)
不( (1, 4) * (1, 1)
,內部矩陣尺寸不一致) 但是,如果您有兩個一維數組(即向量),則兩種操作均無效:
a = np.array([1,2,3,4]) # shape is (4,)
b = np.array([123]) # shape is (1,)
np.dot(b, a)
不起作用( (1,) * (4,)
,但是只能為相同長度的向量定義內積) np.dot(a, b)
不起作用( (4,) * (1)
,相同)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.