2(メイン)構造化配列に値を追加する方法 - タプルのリストを使用するか、値を各フィールドにコピーする。
In [368]: arr=np.zeros((3,),dtype='S10,bool')
In [369]: arr
Out[369]:
array([(b'', False), (b'', False), (b'', False)],
dtype=[('f0', 'S10'), ('f1', '?')])
In [371]: arr['f0']=['one','two','three']
In [372]: arr['f1']=[True,False,True]
In [373]: arr
Out[373]:
array([(b'one', True), (b'two', False), (b'three', True)],
dtype=[('f0', 'S10'), ('f1', '?')])
あなたがサブリストのリストを持っている場合、あなたはタプルにサブリストを変換する必要があります:フィールドによって
In [378]: alist=[['one',True],['two',False],['three',True]]
In [379]: np.array([tuple(i) for i in alist], dtype=arr.dtype)
Out[379]:
array([(b'one', True), (b'two', False), (b'three', True)],
dtype=[('f0', 'S10'), ('f1', '?')])
それは持っているので、column_stack
は、中間配列として役立つことはありません元の列dtypesを失った。
from numpy.lib import recfunctions
の機能を検索することもできます。そのモジュールには、配列をマージする関数があります。しかし、私が見ているものはフィールドコピーメソッドを使用するので、時間を節約することはできません。
In [381]: recfunctions.merge_arrays([['one','two','three'],[False,True,False]])
Out[381]:
array([('one', False), ('two', True), ('three', False)],
dtype=[('f0', '<U5'), ('f1', '?')])
私は現在、 'recarray'を介してこれをリメイクしました:'配列= np.rec.fromarrays((some_array、bool_array)、名=( 'キー'、 'tf_value')) '。そして、両方のタイプが保持されます。そして、通常の「ndarray」のように働く。それともそうではありませんか?私は 'ndarray'と' recarray'の違いを発見していません。 – light2yellow
私はそれらをあまり使用していませんが、 'recarray'が変更された' __getattribute__'メソッドを持つサブクラスであることが分かります。 'fromarrays'は、私が概説したフィールドによるコピーを使用します(コードを見てください)。 – hpaulj