当前位置: 首页 > 面试题库 >

numpy中结构化数组的形状

麻桐
2023-03-14
问题内容

我正在尝试预分配一个空数组,并同时使用以下代码定义大小为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文件。由于将其作为字符串处理,因此输出错误。


问题答案:

通常,结构化数组的字段替换2d数组的列。人们通常会向其中加载csv,genfromtxt并且想知道为什么结果是1d。如您所见,您可以使用化合物制作2d数组dtype,但是每个元素将具有多个值-
如所指定dtype

通常,您使用1d形状初始化该数组,例如(19,)

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

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

savetxt在数组上进行迭代,然后写入fmt%tuple(row),并fmt根据您的输入进行构建。

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

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

这是几乎可以重复的答案

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

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

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



 类似资料: