有沒有什麼優雅的方式來做一個單行矩陣和Python中的兩個或更多行矩陣的每一行之間的點積?我使用列表或列表列表來表示矩陣。在一行矩陣和多行矩陣的每一行之間是否有任何優雅的方法來製作點積?
1
A
回答
3
如果A
是n×m矩陣(n行,每行包含m個條目),並且v
是m個條目的行向量,則「行向量與兩行或更多行的每行之間的點積矩陣「通常稱爲A
和v.T
(v
的轉置,即列向量)之間的矩陣向量乘積。
隨着Numpy,這只是np.dot(A, np.reshape(v, (-1, 1)))
。在普通的Python,你可以寫這樣的:
def inner_product(u, v):
'Inner product between two numeric arrays.'
return sum(x*y for x, y in zip(u, v))
def mat_vec_product(a, v):
'Dot product between matrix `a` and column vector `v`.'
return [inner_product(u, v) for u in a]
>>> mat = [
... [0, 0, 0],
... [0, 0, 1],
... [0, 1, 0],
... [0, 1, 1],
... [1, 0, 0],
... [1, 0, 1],
... ]
>>> row = [100, 20, 3]
>>> print(mat_vec_product(mat, row))
[0, 3, 20, 23, 100, 103]
0
您也可以從scipy
定製距離函數,它是在這種情況下點積使用cdist
。在這種情況下,您必須先將列表的列表轉換爲numpy數組。
import numpy as np
from scipy.spatial.distance import cdist
x1 = np.atleast_2d(np.array([1, 2, 3]))
x2 = np.array([[1,2,3],
[2,3,4],
[4,5,6]])
D = cdist(x1, x2, lambda u, v: np.dot(u.T, v))
D.ravel()
輸出
array([ 14., 20., 32.])
或者,它可以是一個簡單矩陣特技例如D = x1.dot(x2.T)
(輸出與array([ 14., 20., 32.])
相同)
相關問題
- 1. Row.T *矩陣的行點積
- 2. 在矩陣中添加行與矩陣之間的矩陣
- 3. 選擇一行矩陣作爲矩陣
- 4. 檢查矩陣的每一行是否在另一個矩陣中[Python]
- 5. 什麼是在R中的一對矩陣之間執行行方向點積的好方法?
- 6. Matlab:複製矩陣的每一行
- 7. 乘以矩陣中的每一行由另一個矩陣
- 8. 如何使用廣播將一個矩陣的每一行復制到另一個矩陣的每隔一行?
- 9. 如何爲另一個矩陣的每一行矢量化一個矩陣的點積?
- 10. 如何優雅地創建行列索引作爲第一行/列的矩陣?
- 11. 複製的第一行和矩陣
- 12. 將一個矩陣中的每一行與另一個矩陣的每一行進行比較
- 13. 將矩陣的每一行乘以矩陣
- 14. 點積矩陣
- 15. 在一行和1和0的矩陣之間採用xor的更快方法?
- 16. 「角化」矩陣中的每一行
- 17. 替換矩陣中的每一行
- 18. 矩陣的每一行乘以另一個矩陣的同一行,而沒有在R中的循環
- 19. 在矩陣之間的行移位matlab
- 20. 將矩陣的多行連接到另一個矩陣
- 21. 新矩陣中的矩陣與矩陣的所有行組合
- 22. iOS - 使用Accelerate.framework計算矩陣的每一行和/或列的點乘積
- 23. 用一行劃分矩陣中的點
- 24. 從另一個矩陣製作矩陣
- 25. 矩陣行操作
- 26. 做多矩陣的矩陣乘法在一個操作
- 27. 從矩陣A中提取所有行的更好方法,該矩陣包含矩陣B的一個元素
- 28. 從零之間的現有矩陣創建一個新矩陣
- 29. 如何在Thrust或Cublas的兩個矩陣W和X之間找到所有行距矩陣的行?
- 30. 向量陣列和矩陣陣列之間的成對乘積
您可以舉一個輸入和您想要的輸出的例子嗎? – Allen
檢查scipy –
請閱讀此[如何問](http://stackoverflow.com/help/how-to-ask)以改善您的問題。 – thewaywewere