[英]Vector dot product of corresponding rows using numpy
我需要計算 numpy 中兩個二維 arrays u
和v
對應行的向量點積。 u
的行是單位向量。 這是一些示例代碼,說明了我正在嘗試做的事情:
import numpy as np
u = np.array([[1, 0], [.6, .8], [0, 1]])
v = np.array([[1, 2], [3 , 4], [5, 6]])
我天真地嘗試使用numpy的dot
方法,返回錯誤如下:
np.dot(u, v)
ValueError Traceback (most recent call last)
<ipython-input-9-146fe9079c1e> in <module>
----> 1 np.dot(u,v)
<__array_function__ internals> in dot(*args, **kwargs)
ValueError: shapes (3,2) and (3,2) not aligned: 2 (dim 1) != 3 (dim 0)
定義產生所需行為的 function 很簡單:
def mydot(a, b):
return np.sum(a*b,axis=1,keepdims=True)
mydot(u,v)
array([[1.],
[5.],
[6.]])
然而,這似乎有點笨拙,讓我懷疑我錯過了什么。 有沒有更直接的 numpy 方法來做到這一點?
你的方法很好。 同時,您可以使用帶有額外維度的matmul
將 1x2 的堆棧乘以 2x1 矩陣:
u[..., None] @ v[:, None, :]
matmul
和dot
最大的區別是matmul
廣播初始維度,而dot
將它們組合起來。
但最快的方法可能是einsum
:
np.einsum('ij,ij->i', u, v)
np.dot
在用於 2D arrays 時充當矩陣乘法,因此np.dot(v,uT)
這不會給您錯誤。 但是對於點積,你可以使用這個:
np.sum(v*u,axis=1)
v*u
只需在np.sum()
中廣播 2D 數組和軸,就可以讓您 select 您想要計算點積的維度。 我希望你明白了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.