3

我只需要获取数组的小数部分。使用 numpy 或简单地使用 python modf 函数很方便。

如果我们的正小数数据数组很大,例如可以大到 (1000000,3),那么更方便的是:

numpy.modf(array)[0]  
array-numpy.trunc(array)

在我看来,2 在内存使用方面更快、更便宜……但不确定。python 和 numpy 专家怎么看?

4

1 回答 1

6

我不是专家,所以我必须使用timeit模块来检查速度。我使用 IPython(这使得计时事情变得非常容易)但即使没有它,timeit模块也可能是要走的路。

In [21]: a = numpy.random.random((10**6, 3))

In [22]: timeit numpy.modf(a)[0]
10 loops, best of 3: 90.1 ms per loop

In [23]: timeit a-numpy.trunc(a)
10 loops, best of 3: 135 ms per loop

In [24]: timeit numpy.mod(a, 1.0)
10 loops, best of 3: 68.3 ms per loop

In [25]: timeit a % 1.0
10 loops, best of 3: 68.1 ms per loop

最后两个是等价的。我对内存使用知之甚少,但如果两者都没有使用比直接使用 mod 更多的内存,我会感到modf(a)[0]惊讶a-numpy.trunc(a)

[顺便说一句,如果您的代码执行您想要的操作并且您只对改进感兴趣,那么您可能对codereview stackexchange感兴趣。分界线在哪里我还不太清楚,但感觉更像是他们的那杯茶。]

于 2012-11-05T15:40:10.490 回答