numpy 数组的小数部分

Cob*_*bry 3 python numpy python-2.7

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

如果我们有大量的正分数数据,例如可以像 (1000000,3) 一样大,这样做更方便:

numpy.modf(array)[0]  
array-numpy.trunc(array)
Run Code Online (Sandbox Code Playgroud)

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

DSM*_*DSM 5

我不是专家,所以我必须使用该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
Run Code Online (Sandbox Code Playgroud)

最后两个是等价的。我不知道多少关于内存的使用,但我想如果感到惊讶modf(a)[0]a-numpy.trunc(a)两人都没有不是简单地直接服用国防部使用更多的内存。

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