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