如何有效地在numpy数组中相乘元素?

时间:2015-04-14 14:45:59

标签: python arrays performance numpy multiplication

给定形状x的numpy数组(m,)和形状y的numpy数组(m/n,),如何将x乘以{的相应元素{1}}有效吗?

这是我最好的尝试:

y

1 个答案:

答案 0 :(得分:3)

您的解决方案对我来说非常好。

如果您想稍微加快速度,可以:

  • 使用ravel()代替flatten()(如果可能,前者将返回视图,后者始终返回副本)。

  • 以Fortran顺序重塑x以避免y上的另一个索引操作的开销(虽然后续时间表明此加速可忽略不计

因此重写乘法变为:

>>> (x.reshape((2, -1), order='f') * y).ravel('f')
array([ 2, 10, 12,  8, 54,  6])

时序:

>>> %timeit (y[:, np.newaxis] * x.reshape((-1, n))).flatten()
100000 loops, best of 3: 7.4 µs per loop

>>> %timeit (x.reshape((n, -1), order='f') * y).ravel('f')
100000 loops, best of 3: 4.98 µs per loop