gpt4 book ai didi

python - 如何将 numpy.savetxt 与包含数组的结构化数组一起使用

转载 作者:行者123 更新时间:2023-11-28 18:23:52 25 4
gpt4 key购买 nike

假设我有一个结构化数组,如下所示:

a = np.zeros(10,dtype=[('label1',np.int32, 4), ('label2', np.float_)])

我尝试将其保存为 csv 文件:

np.savetxt('output.csv', a, fmt='%d,%d,%d,%d,%f')

Python 会产生这个错误:

ValueError: fmt has wrong number of % formats:  %d,%d,%d,%d,%f

我无法创建适合我的输出的 fmt 字符串。 %s 在这里对我不起作用,因为我需要能够指定 float 的格式。

是否可以从这种类型的结构化数组创建一个 csv 文件?

最佳答案

本质上,savetxt 所做的是:

for row in arr:
print(fmt % tuple(row))

因此 fmt 必须与 row 一起工作,或者在本例中,是数组的一个元素。

In [330]: a = np.zeros(10,dtype=[('label1',np.int32, 4), ('label2', np.float_)])
...:
In [331]: a
Out[331]:
array([([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.),
([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.),
([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.), ([0, 0, 0, 0], 0.),
([0, 0, 0, 0], 0.)],
dtype=[('label1', '<i4', (4,)), ('label2', '<f8')])
In [332]: a[0]
Out[332]: ([0, 0, 0, 0], 0.)
In [333]: tuple(a[0])
Out[333]: (array([0, 0, 0, 0]), 0.0)

将 4 个整数嵌套在 label1 中使得很难想出一种有效的格式。这是一个如何对 Python '%' 进行格式化的问题。

In [334]: '%s, %f'%_
Out[334]: '[0 0 0 0], 0.000000'

如果 a 是 5 个字段会更容易

In [335]: a = np.zeros(10,dtype='i,i,i,i,f')
In [336]: a
Out[336]:
array([(0, 0, 0, 0, 0.),....
(0, 0, 0, 0, 0.)],
dtype=[('f0', '<i4'), ('f1', '<i4'), ('f2', '<i4'), ('f3', '<i4'), ('f4', '<f4')])
In [337]: tuple(a[0])
Out[337]: (0, 0, 0, 0, 0.0)
In [338]: '%d, %d, %d, %d, %f'%tuple(a[0])
Out[338]: '0, 0, 0, 0, 0.000000'

我认为您需要“展平”数组的结构,或者编写自定义的savetxt。正如我指出的那样,savetxt 并不花哨。如果您可以按所需格式逐个打印数组元素,则可以将该格式写入文件。

关于python - 如何将 numpy.savetxt 与包含数组的结构化数组一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42938436/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com