4
我有兩個Numpy陣列x
形狀(m, i)
和y
與形狀(m, j)
(所以行數是相同的)。我想將每列x
與每列y
逐元素相乘,以便結果形狀爲(m, i*j)
。從2D陣列乘以每列與另一個2D陣列的每列
實施例:
import numpy as np
np.random.seed(1)
x = np.random.randint(0, 2, (10, 3))
y = np.random.randint(0, 2, (10, 2))
這產生了以下兩個數組x
:
array([[1, 1, 0],
[0, 1, 1],
[1, 1, 1],
[0, 0, 1],
[0, 1, 1],
[0, 0, 1],
[0, 0, 0],
[1, 0, 0],
[1, 0, 0],
[0, 1, 0]])
和y
:
array([[0, 0],
[1, 1],
[1, 1],
[1, 0],
[0, 0],
[1, 1],
[1, 1],
[1, 1],
[0, 1],
[1, 0]])
現在的結果應該是:
array([[0, 0, 0, 0, 0, 0],
[0, 0, 1, 1, 1, 1],
[1, 1, 1, 1, 1, 1],
[0, 0, 0, 0, 1, 0],
[0, 0, 0, 0, 0, 0],
[0, 0, 0, 0, 1, 1],
[0, 0, 0, 0, 0, 0],
[1, 1, 0, 0, 0, 0],
[0, 1, 0, 0, 0, 0],
[0, 0, 1, 0, 0, 0]])
目前,我過的x
和y
列執行此操作有兩個嵌套的循環:
def _mult(x, y):
r = []
for xc in x.T:
for yc in y.T:
r.append(xc * yc)
return np.array(r).T
不過,我敢肯定,必須有一個更好的解決方案,我可以似乎沒有想到。
「複雜」的黑客,但非常簡潔! +1 –
你可以在這裏添加一些解釋嗎?它簡潔但不能說明問題。 – kmario23
@ kmario23添加了一些解釋,看看吧! – Divakar