numpy savetxt 格式为整数不保存零

Posted

技术标签:

【中文标题】numpy savetxt 格式为整数不保存零【英文标题】:numpy savetxt formatted as integer is not saving zeroes 【发布时间】:2014-04-28 17:39:10 【问题描述】:

我正在尝试通过以下方式将 numpy.array 保存到 .csv。

with open("resultTR.csv", "wb") as f:
    f.write(b'ImageId,Label\n')
    numpy.savetxt(f, result, fmt='%i', delimiter=",")

结果是由两列组成的 numpy.array,第一列是索引(数字 1 到 n),第二列是 (0,9) 中的值。

不幸的是,我遇到的问题是,每当第二列中有 0 时,就不会将任何内容写入第二列中生成的 .csv 文件。

换句话说,数组的前五行如下所示:

[[  1.00000000e+00   2.00000000e+00]
 [  2.00000000e+00   0.00000000e+00]
 [  3.00000000e+00   9.00000000e+00]
 [  4.00000000e+00   9.00000000e+00]
 [  5.00000000e+00   3.00000000e+00]

.csv 文件的前五行如下:

ImageId,Label
1,2
2
3,9
4,9
5,3

在我看来我的代码应该可以工作,因此不保存零在我看来很奇怪。有谁知道我的写入 .csv 文件的代码可能有什么问题?

编辑:

为了完成,我的 python 版本是 2.7.2,它在 Mac OS X 10.9.2 上运行

【问题讨论】:

好吧,在我的机器上,你的代码运行良好。您可以尝试使用%d 代替%i 吗?从 C 继承了一些细微的差异,这可以解释我机器上的不同行为。见this 我已经尝试过了,但不幸的是它不适合我。我也试过%u,但结果还是一样。 数组的dtype是什么? 保存result.astype(int)有帮助吗? 谢谢 result.astype(int) 对我有用。 【参考方案1】:

我会尝试将数组保存为 int 数组,如 result.astype(int) 或完整:

with open("resultTR.csv", "wb") as f:
    f.write(b'ImageId,Label\n')
    numpy.savetxt(f, result.astype(int), fmt='%i', delimiter=",")

【讨论】:

【参考方案2】:

更简洁的解决方案是使用参数fmt='%s'

with open("resultTR.csv", "wb") as f:
   f.write(b'ImageId,Label\n')
   numpy.savetxt(f, result, fmt='%s', delimiter=",")

【讨论】:

【参考方案3】:

在使用numpy.savetxt 的脚本中也遇到了同样的问题,但我无法使用result.astype(int),因为我在另一列中有浮动。

使用%5.0f 解决了它的输出格式为零的问题。

【讨论】:

以上是关于numpy savetxt 格式为整数不保存零的主要内容,如果未能解决你的问题,请参考以下文章

Numpy savetxt如何在那个位置指定零?

在 numpy.savetxt 中指示多个数字的格式

使用带有标题的 np.savetxt 保存结构化的 numpy 数组

numpy 数组到一个文件,np.savetxt

numpy如何保存(存储)和读取数据?(.npy/.npz)np.save() np.savez() np.savetxt()

Numpy数组的保存与读取方法