用混合d保存numpy数组

2024-06-07 22:41:22 发布

您现在位置:Python中文网/ 问答频道 /正文

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

我该怎么解决?


Tags: numpynumberoutputmy错误整数数组array
2条回答

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

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

真正的问题是,打印出一个1d8元素数组会得到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有点混乱,因为它们将大部分的措辞用于处理复数,而不是简单的浮点数和整数,但基本规则是相同的。您可以为每一列指定一个说明符,也可以为每一列指定一个说明符(在中间为每一列指定实部和虚部是不相关的)。


如果要将它写在一行8列中,首先需要将它改为一行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 

相关问题 更多 >

    热门问题