簡體   English   中英

脾氣暴躁的dotproduct怪異行為

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM