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

String numpy数字数组到删除尾随零的字符串,string,numpy,format,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

问:我将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函数,这意味着速度很快,但是有没有办法用一个内置的numpy函数来实现这一点?(即,“mod”是否有我找不到的选项?)


谢谢

感谢Warren Weckesser提供的宝贵意见。这要归功于他

我将代码转换为使用:

formatter = '%d'
if num_type == 'float':
  formatter = '%%.%df' % decimals
np.savetxt(out, arr, fmt=formatter)
其中out是一个文件句柄,我已经向它写入了头文件。或者,我也可以使用
np.savetxt
中的
headers=
参数。我不知道为什么我没有在文档中看到这些选项

对于1300 x 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')

为了避免使用基于数字类型的开关,但它并没有像我希望的那样工作。

为什么不使用
print np.char.mod(“%0.4f',x)
?@Dalek,因为这不会删除后面的零。我想删除零的原因是它会使我的文件变小。我正在手动创建一些ascii GIS光栅,并希望将大文件保持尽可能小。速度方面,删除拖尾零点的附加操作并不是出价交易,所以我认为值得拥有更小的文件。如果有几个文件比需要的大一些就可以了,但我正计划做一些相当大规模的事情……这会累加起来的。所以,我对我使用的速度还可以,但我很好奇是否有人有更灵活的方法。如果你可以使用5位“重要数字”而不是4位小数,你可以使用
np.char.mod(“%.5g”,x)
。你使用的是什么版本的numpy?在最新版本的numpy中,
savetxt
接受一个文件句柄:Related: