我正在尝试将pytable和recarray的格式进行规范化,以便将重新排列附加到pytable。要做到这一点,我需要从重新排列中获取字段信息(即名称和字段格式)我可以使用以下方法轻松获取重新排列名称的列表:
namelist = Myrecarray.dtype.names
但尚未找到相应的属性。 recarray dtypes属性返回名称和格式的元组列表,但不能迭代此列表以检索格式。这似乎是非标准的,因为我能够迭代其他元组列表以获取特定的元组项。例如,以下代码显示了对数组的迭代和重新排列,并尝试迭代重新排列的dtype的元组列表:
import numpy as np
my_list = [(1, 2), (3, 4), (5, 6)]
print([x[0] for x in my_list])
print('-----------------------')
my_array = np.array([(1.0, 2, 5), (3.0, 4, 77)], dtype=[('x', float), ('y', int), ('z', float)])
print([x[2] for x in my_array])
print('-----------------------')
img = np.array([[(0,0,0), (1,0,0)], [(0,1,0), (0,0,1)]], {'names': ('r','g','b'), 'formats': ('f4', 'i2', 'f4')})
nta = np.array(img.dtype)
print(img.dtype)
print(img.dtype.names)
print(img.dtype[0])
print(nta)
print([x[0] for x in nta])
print([x[0] for x in img.dtype])
此代码的打印输出(如下所示)表明我可以:
1)迭代元组列表;
2)迭代重组;
3)检索记录数组的dtype作为明显的元组列表;
4)从重新排列中检索名称
5)检索重新排列的一个字段的格式
但我不能:
6)迭代重新排列dtype以检索每个字段的格式 7)迭代重新排列dtype强制转换为数组以检索每个字段的格式
输出是:
[1, 3, 5]
-----------------------
[5.0, 77.0]
-----------------------
[('r', '<f4'), ('g', '<i2'), ('b', '<f4')]
('r', 'g', 'b')
float32
[('r', '<f4'), ('g', '<i2'), ('b', '<f4')]
'import sitecustomize' failed; use -v for traceback
Traceback (most recent call last):
File "....\Python\test0.py", line 23, in <module>
print([x[0] for x in nta])
TypeError: iteration over a 0-d array
有谁知道如何从记录数组中检索字段格式作为列表?
答案 0 :(得分:1)
print([x[1] for x in img.dtype.descr])