pythonic-CPU优化应用乘法等简单运算的方法是什么:
- 沿 2D 阵列的一维
- 到 2D 数组其他维度的所有元素
- 根据另一个 1D 数组中的元素
?
例:
x=np.arange(150).reshape([50,3])
y=np.arange(50)+10
我想做:
np.array([x[i,:]*y[i] for i in range(50)])
但我想让它尽可能快,因为"50"可能是无数。
顺便说一下,这完全等同于:
np.array([x[i,:]*j for i,j in enumerate(y)])
?
我在这里做了一些更新,但终于打开了一个新问题
您可以使用
None
或np.newaxis
将新轴添加到y
,以便它可以跨x
广播:
x * y[:,None]
np.allclose((x * y[:,None]), np.array([x[i,:]*y[i] for i in range(50)]))
# True
另一种可能,使用阵列产品的瑞士军刀,那就是 np.einsum
In [9]: x=np.arange(150).reshape([50,3])
...: y=np.arange(50)+10
...: check=np.array([x[i,:]*y[i] for i in range(50)])
...: np.allclose(np.einsum('ji,j->ji', x, y),check)
Out[9]: True