python - numpy 数组的小数部分

标签 python numpy python-2.7

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

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

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

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

最佳答案

我不是专家,所以我必须使用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 感兴趣.我仍然不太清楚分界线在哪里,但这感觉更像是他们的那杯茶。]

关于python - numpy 数组的小数部分,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13235187/

相关文章:

python - sqlite3 和 cursor.description

python - Jupyter Notebook 中未定义名称 'KMeans'

python - 将前导零添加到字符串 Python

pandas - 如何检查具有多种类型的列中的数据类型? -寻找更好的解决方案

python - Matplotlib - 停止动画

python - 可变数量列表的交集

python - 检查两个有序列表的匹配

Python - 创建一个新列,该列从右侧取第一列不是 Pandas 中的 NaN

python - 从 MySQL 获取值并用 if 循环它

python - 意外关机期间损坏文件的危险