【发布时间】:2016-12-07 12:06:12
【问题描述】:
我有两个形状为(m, i) 的Numpy 数组x 和形状为y 的(m, j)(因此行数相同)。我想将x 的每一列与y 的每一列元素相乘,这样结果的形状为(m, i*j)。
例子:
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
但是,我很确定一定有一个我想不出的更优雅的解决方案。
【问题讨论】:
标签: python numpy vectorization