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

标签 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 函数,这意味着这很快,但是有没有办法用一个内置的 numpy 函数来完成这个? (即,'mod' 是否有一个我找不到的选项?)它会节省两次返回副本的开销,这对于非常大的数组来说是缓慢的。

谢谢!

最佳答案

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

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

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

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

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

努力避免基于数字类型的开关,但它没有像我希望的那样工作。

关于string - numpy 数字数组到删除尾随零的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25315816/

相关文章:

javascript - 使用javascript从字符串中提取数字

python - Matplotlib:如何制作 Numpy 数组中值计数的堆叠图

python - Numpy:在没有循环的情况下获取索引内的最小值?

python - 如何快速将 '001100' 之类的字符串转换为 numpy.array([0,0,1,1,0,0])?

Java格式小时和分钟

java - 字符串的八进制值

字符指针和数组

java - 如何在 Java 中比较字符串?

python - 从二维数组中删除交换的重复项

python用零填充小数