如果我有一個值陣列:
numbers = np.array([1, 2, 4, 5])
和一個向量:
vector = np.array([1, 0, 1])
如何將向量乘以值陣列以獲得以下結果:
vector_array = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
我嘗試通過執行以下操作使用 matmul 來做到這一點:
vector_array = vector[..., None]@numbers
和:
vector_array = vector.T@numbers
我希望得到列向量,然后我可以轉置,但是我得到了這個輸出:
選項1:
vector_array = vector[..., None]@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 1)
選項 2:
vector_array = vector.T@numbers
ValueError: matmul: Input operand 1 has a mismatch in its core dimension 0, with gufunc signature (n?,k),(k,m?)->(n?,m?) (size 2 is different from 3)
如何強制 matmul 以預期的方式運行并將列向量乘以行向量來給我一個矩陣?我應該使用其他功能嗎?
uj5u.com熱心網友回復:
使用numpy 廣播:
vector_array = vector * numbers[:, None]
輸出:
>>> vector_array
array([[1, 0, 1],
[2, 0, 2],
[4, 0, 4],
[5, 0, 5]])
要理解它,請看numbers[:, None]:
>>> numbers
array([1, 2, 4, 5])
>>> numbers[:, None]
array([[1],
[2],
[4],
[5]])
所以基本上vector * numbers[:, None]乘以vector的每個元素numbers。
uj5u.com熱心網友回復:
與@richardec 給出的一種不同的可能性是使用numpy.outer:
numpy.outer(numbers, normal) = np.array([[1, 0, 1], [2, 0, 2], [4, 0, 4], [5, 0, 5]])
根據需要,不確定這兩種方法中的哪一種更快。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/430365.html
標籤:python-3.x 麻木的 矩阵 矩阵乘法
