使用混合数据保存numpy数组

时间:2013-07-09 21:22:13

标签: python numpy io

我有一个numpy数组,其中每个值都是一个浮点后跟一个整数,例如:

my_array = numpy.array([0.4324321, 0, 0.9437212, 1, 0.4738721, 0, 0.49327321, 0])

我想像这样保存它:

0.4324321 0 0.9437212 1 0.4738721 0 0.49327321 0

但如果我打电话:

numpy.savetxt('output.dat',my_array,fmt='%f %i')

我收到错误:

AttributeError: fmt has wrong number of % formats.  %f %i

我该如何解决这个问题?

2 个答案:

答案 0 :(得分:7)

你真正的问题是打印出1D 8元素数组会给你8行1列(或者,如果强行,1行8列),而不是4行2列。因此,您只能指定一种格式(或者,如果您强制使用1种或8种格式)。

如果要以4x2形状而不是1x8输出,则需要先重新整形数组:

numpy.savetxt('output.dat', my_array.reshape((4,2)), fmt='%f %i')

这会给你:

0.432432 0
0.943721 1
0.473872 0
0.493273 0

The docs有点令人困惑,因为他们将大部分措辞用于处理复数而不是简单的浮点数和整数,但基本规则是相同的。您为每列指定单个说明符或说明符(为每列指定实部和虚部的中间情况不相关)。


如果要将其写入1行8列中,首先需要将其重新整形为1行8列而不是8行。

然后你需要指定8种格式。没有办法告诉numpy“重复这两种格式四次”,但如果没有numpy的帮助,这很容易做到:

numpy.savetxt('output.dat', my_array.reshape((1,8)), fmt='%f %i ' * 4)

这会给你:

0.432432 0 0.943721 1 0.473872 0 0.493273 0 

答案 1 :(得分:1)

问题是savetxt()将为每个数组条目打印一行。您可以强制2D-array创建新轴,然后打印(1x8)格式:

numpy.savetxt('output.dat', my_array[numpy.newaxis,:], fmt='%f %i'*4)
相关问题