【问题标题】:Multiplying array in pythonpython中的乘法数组
【发布时间】:2014-04-10 08:47:56
【问题描述】:

this 问题中,我看到了如何将整个 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 模块。
  • 第一个代码 sn-p 是 4.47us 而不是 11.9us 但我会使用您的真实数据对其进行分析
  • 实际上,时间似乎没有区别,对于 100,000 个元素的随机数组,仅计算 P=H.max() 需要 51.2us,然后 SP = P*np.array(S) 需要 165us,然后 SP = H.max()*np.array(S) 需要 217us所以差别不大
  • @EdChum 好的。我自己一直在尝试使用 timeit,但我以前从未做过,所以我无法像你那样快速测试它。感谢您的信息!

标签: python arrays numpy


【解决方案1】:

这两种方法差别不大:

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()的单个步骤与单行计算没有区别

【讨论】:

    猜你喜欢
    • 2020-01-05
    • 2011-08-15
    • 1970-01-01
    • 1970-01-01
    • 2011-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-10-16
    相关资源
    最近更新 更多