优化 Python 中的 2D-1D 操作



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)])


我在这里做了一些更新,但终于打开了一个新问题

您可以使用

Nonenp.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

最新更新