2

我正在尝试预分配一个空数组,同时使用以下代码定义大小为 19x5 的数据类型:

import numpy as np
arr=np.empty((19,5),dtype=[('a','|S1'),('b', 'f4'),('c', 'i'),('d', 'f4'),('e', 'f4')])

结果有点出乎意料,产生了一个 19*5*5 的数组。但是,尝试:

arr=np.empty((19,1),dtype=[('a','|S1'),('b', 'f4'),('c', 'i'),('d', 'f4'),('e', 'f4')])

给出每行(5 个字段)的适当长度,这显然看起来像一维数组。

当我试图写这个时,只允许这种格式:

np.savetxt(file, arr, delimiter=',', fmt='%s')

这告诉我我正在处理一个字符串。有没有办法得到一个未展平的 19x5 形状的结构化阵列?

主要问题出现在使用 savetxt 编写时。我想要一个包含所有 5 列值的 csv 文件。由于这是作为字符串处理的,因此会给出错误的输出。

4

1 回答 1

4

通常,结构化数组的字段替换二维数组的列。人们经常加载 csvgenfromtxt并想知道为什么结果是 1d。正如您所发现的,您可以使用复合创建一个二维数组dtype,但每个元素将有多个值 - 正如dtype.

通常,您会使用一维形状初始化该数组,例如(19,).

请注意,您必须按字段或使用元组列表填充值。

我没有使用savetxt结构化数组的经验,也无法在此平板电脑上运行测试。但可能有一些问题会有所帮助。

savetxt迭代一个数组,并写入fmt%tuple(row), wherefmt是根据您的输入构建的。

我建议尝试fmt='%s %s. %s. %s %s'- %dtype 中每个字段的格式。查看它的文档。另外我不知道 (19,) 数组是否会比 (19,1) 表现更好。

尝试格式化数组元素。它们应该看起来像格式化程序的元组。如果没有尝试tolist()tuple(A[0])

这是几乎足以重复的答案

https://stackoverflow.com/a/35209070/901925

 ab = np.zeros(names.size, dtype=[('var1', 'S6'), ('var2', float)])
 np.savetxt('test.txt', ab, fmt="%10s %10.3f")

====================

savetxt由于元组格式,只能处理一维结构化数组。

于 2016-04-08T20:49:17.117 回答