在Python中计算数组的乘积

3

这个问题中,我看到了如何用一个浮点数乘以一个numpy数组中的所有元素(JoshAdel的第二个答案)。但是当我将P更改为(长)数组的最大值时,是更好地事先存储最大值,还是在第二个示例中仅计算H的最大值一次?

import numpy as np
H = [12,12,5,32,6,0.5]
P=H.max()
S=[22, 33, 45.6, 21.6, 51.8]
SP = P*np.array(S)

或者
import numpy as np
H = [12,12,5,32,6,0.5]
S=[22, 33, 45.6, 21.6, 51.8]
SP = H.max()*np.array(S)

那么它是为每个要乘的项目计算H.max(),还是聪明到只需计算一次?在我的代码中,SH是比示例中更长的数组。


你可以构造一个由10^6个向量组成的示例并进行检查。或者在循环中运行它。甚至有一个timeit模块可以用来做这件事。 - luk32
第一段代码片段耗时4.47微秒,而不是11.9微秒,但我建议使用您的真实数据进行性能分析。 - EdChum
2
实际上,在计时方面似乎没有什么区别,对于一个随机数组包含100,000个元素,仅计算P=H.max()就需要51.2微秒,然后计算SP = P*np.array(S)需要165微秒,而计算SP = H.max()*np.array(S)则需要217微秒,因此差别很小。 - EdChum
@EdChum 好的。我自己也一直在尝试使用timeit,但是我以前从来没有做过,所以我无法像你那样快速测试它。感谢您提供的信息! - Mathias711
1个回答

3

这两种方法之间的区别很小:


In [74]:

import numpy as np
H = np.random.random(100000)
%timeit P=H.max()
S=np.random.random(100000)
%timeit SP = P*np.array(S)
%timeit SP = H.max()*np.array(S)
10000 loops, best of 3: 51.2 µs per loop
10000 loops, best of 3: 165 µs per loop
1000 loops, best of 3: 217 µs per loop

在这里,您可以看到预先计算H.max()的每个步骤与在单行中计算它没有区别。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接