numpy数组的小数部分

时间:2012-11-05 15:27:22

标签: python numpy python-2.7

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

如果我们有大量的正数小数据,例如可以大到(1000000,3),那么做什么更方便:

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

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

1 个答案:

答案 0 :(得分:4)

我不是专家,所以我必须使用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

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

[顺便说一句,如果您的代码符合您的要求并且您只对改进感兴趣,那么您可能会对the codereview stackexchange感兴趣。我仍然没有很好的处理分界线的位置,但这感觉更像是他们的一杯茶。]

相关问题