簡體   English   中英

numpy中一維數組的乘法

[英]Multiplication of 1d arrays in numpy

我有兩個一維向量(在某些情況下它們也可以是二維矩陣)。 我找到了點積的點函數,但如果我想將 a.dot(b) 與這些形狀相乘:

a = [1,0.2,...]
a.shape = (10,)
b = [2.3,4,...]
b.shape = (21,)
a.dot(b) and I get ValueError: matrices not aligned.

我想做

c = a.dot(b)
c.shape = (10,21)

任何想法如何做到這一點? 我也試過轉置功能,但它不起作用。

讓我們從兩個數組開始:

>>> a
array([0, 1, 2, 3, 4])
>>> b
array([5, 6, 7])

轉置任何一個數組都不起作用,因為它只是一維的 - 沒有什么可以轉置,而是需要添加一個新軸:

>>> b.T
array([5, 6, 7])
>>> b[:,None]
array([[5],
       [6],
       [7]])

要使點積如圖所示工作,您必須做一些令人費解的事情:

>>> np.dot(a[:,None],b[None,:])
array([[ 0,  0,  0],
       [ 5,  6,  7],
       [10, 12, 14],
       [15, 18, 21],
       [20, 24, 28]])

您可以依靠廣播而不是dot

a[:,None]*b

或者您可以簡單地使用外部:

np.outer(a,b)

所有三個選項都返回相同的結果。

您可能還對這樣的事情感興趣,以便每個向量始終是一個二維數組:

np.dot(np.atleast_2d(a).T, np.atleast_2d(b))

更簡單的方法是像這樣定義數組:

 >>>b = numpy.array([[1,2,3]]) 

然后你可以輕松地轉置你的數組:

 >>>b.T
 array([[1],
        [2],
        [3]])

你也可以做乘法:

 >>>b@b.T
 [[1 2 3]
 [2 4 6]
 [3 6 9]]

另一種方法是像這樣強制重塑你的向量:

>>> b = numpy.array([1,2,3])
>>> b.reshape(1,3).T
array([[1],
       [2],
       [3]])

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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