应用诸如乘法之类的简单操作的pythonic-CPU优化方法是什么:
?
示例:
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)])
?
我在这里做了一些更新,但终于提出了一个新问题
答案 0 :(得分:4)
您可以仅使用y
或None
向np.newaxis
添加新轴,以便可以在x
上广播它:
x * y[:,None]
np.allclose((x * y[:,None]), np.array([x[i,:]*y[i] for i in range(50)]))
# True
答案 1 :(得分:1)
另一种可能性,使用瑞士军刀的阵列产品,即
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