1

再配列をpytableに追加する目的で、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) 再配列の 1 つのフィールドの形式を取得する

しかし、私はできません:

6) recarray dtype を反復して各フィールドのフォーマットを取得する 7) recarray 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

レコード配列からフィールド形式をリストとして取得する方法を知っている人はいますか?

4

1 に答える 1

2

うーん、初心者は自分の質問に対する答えを見つけました。それを反復可能なオブジェクトに変えるには、「descr」プロパティが必要でした

print([x[1] for x in img.dtype.descr])
于 2012-09-04T11:45:17.717 に答える