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

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

4

2 回答 2

7

您真正的问题是打印一维 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 
于 2013-07-09T21:29:04.910 回答
1

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

numpy.savetxt('output.dat', my_array[numpy.newaxis,:], fmt='%f %i'*4)
于 2013-07-10T17:48:06.540 回答