我有一个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
我该如何解决这个问题?
答案 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)