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 格式为整数不保存零的主要内容,如果未能解决你的问题,请参考以下文章
使用带有标题的 np.savetxt 保存结构化的 numpy 数组
numpy如何保存(存储)和读取数据?(.npy/.npz)np.save() np.savez() np.savetxt()