numpy数组到删除了尾随零的字符串

时间:2014-08-14 19:08:12

标签: string numpy format

问题:我的方法是将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'是否有一个我找不到的选项?)它会节省两次返回副本的开销,这对于非常大的数组来说是很慢的。

谢谢!

1 个答案:

答案 0 :(得分:2)

感谢Warren Weckesser提供有价值的评论。相信他。

我将我的代码转换为使用:

formatter = '%d'
if num_type == 'float':
  formatter = '%%.%df' % decimals
np.savetxt(out, arr, fmt=formatter)

其中out是我已经编写标题的文件句柄。或者,我也可以使用headers=中的np.savetxt参数。我不知道我怎么没有在文档中看到这些选项。

对于1300比1300的numpy数组,我之前创建的逐行输出(使用np.core.defchararray.rstrip(np.char.mod('%.4f', x), '0'))耗时约1.7秒,使用np.savetxt需要0.48秒。

所以np.savetxt是一个更清晰,更易读,更快的解决方案。

注意: 我试过了:

np.savetxt(out, arr, fmt='%.4g')

努力没有基于数字类型的开关,但它没有按照我的希望工作。