【发布时间】:2014-08-20 00:46:57
【问题描述】:
问题:我将 numpy 数字数组转换为具有特定小数位数和尾随零的字符串的 numpy 数组的方法是“最佳”方式吗?
import numpy as np
x = np.array([1.12345, 1.2, 0.1, 0, 1.230000])
print np.core.defchararray.rstrip(np.char.mod('%.4f', x), '0')
输出:
['1.1235' '1.2' '0.1' '0.' '1.23']
这是期望的结果。 (我对四舍五入的问题没意见)
'rstrip' 和 'mod' 这两个函数都是 numpy 函数,这意味着这很快,但是有没有办法使用 ONE 内置的 numpy 函数来完成呢? (即 'mod' 有一个我找不到的选项吗?)它可以节省返回副本两次的开销,这对于非常大的数组来说很慢。
谢谢!
【问题讨论】:
-
你为什么不直接使用
print np.char.mod('%0.4f', x)? -
@Dalek 因为这不会删除尾随零。我想删除零的原因是它会使我的文件更小。我正在手动创建一些 ascii GIS 栅格,并且希望将大文件保持尽可能小。在速度方面,删除尾随零的额外操作不是投标交易,所以我认为它值得拥有更小的文件。一些文件比需要的大就好了,但我打算做一些相当大的事情......它会加起来。所以,我对我使用的速度没问题,但我很好奇是否有人有更流畅的方式。
-
如果您可以接受 5 个“有效数字”而不是 4 个小数位,您可以使用
np.char.mod("%.5g", x)。 -
你使用的是什么版本的 numpy?在最新版本的 numpy 中,
savetxt接受文件句柄:docs.scipy.org/doc/numpy/reference/generated/numpy.savetxt.html