保存包含混合数据的NumPy数组

8

我有一个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

我该如何修复这个问题?

1
savetxt 不是 array 类型的成员。你是不是想用 numpy.savetxt - abarnert
顺便说一下,如果您展示一下期望的输出结果,而不是让我们猜测,那将会非常有帮助。至少有两个聪明人未能读懂您的想法,这并非巧合(或者可能是两个聪明人再加上一个像我这样聪明的人;我也不确定自己是否猜对了……) - abarnert
@abarnert 感谢您的评论,我已编辑帖子以解决这两个问题。 - rhombidodecahedron
2个回答

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

文档有点混乱,大部分内容都是关于处理复数而不是简单的浮点数和整数,但基本规则相同。您可以指定单个说明符或每列一个说明符(指定每列的实部和虚部并不相关)。


如果要将其写成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 

实际上我确实想要1x8格式。能够得到吗? - rhombidodecahedron

1
问题在于savetxt()会为每个数组条目打印一行。您可以通过创建新轴来强制创建2D-array,然后以(1x8)格式打印:
numpy.savetxt('output.dat', my_array[numpy.newaxis,:], fmt='%f %i'*4)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接