使用混合数据保存numpy数组

rho*_*ron 8 python io numpy

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

my_array = numpy.array([0.4324321, 0, 0.9437212, 1, 0.4738721, 0, 0.49327321, 0])
Run Code Online (Sandbox Code Playgroud)

我想像这样保存它:

0.4324321 0 0.9437212 1 0.4738721 0 0.49327321 0
Run Code Online (Sandbox Code Playgroud)

但如果我打电话:

numpy.savetxt('output.dat',my_array,fmt='%f %i')
Run Code Online (Sandbox Code Playgroud)

我收到一个错误:

AttributeError: fmt has wrong number of % formats.  %f %i
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?

aba*_*ert 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')
Run Code Online (Sandbox Code Playgroud)

这会给你:

0.432432 0
0.943721 1
0.473872 0
0.493273 0
Run Code Online (Sandbox Code Playgroud)

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


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

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

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

这会给你:

0.432432 0 0.943721 1 0.473872 0 0.493273 0 
Run Code Online (Sandbox Code Playgroud)