私は構造化された numpy 配列を持っています。recfunctions ライブラリ http://pyopengl.sourceforge.net/pydoc/numpy.lib.recfunctions.html 関数 append_fields() または rec_append_fields() を使用して、何らかの形状のフィールドを追加したい. ただし、エラーが発生します。
ValueError: オペランドはシェイプ (10) (10,3) と一緒にブロードキャストできませんでした
は10
既存の配列の長さであり、(3,)
追加するフィールドの形状です。
例えば:
import numpy as np
from numpy.lib.recfunctions import append_fields
my_structured_array = np.array(
zip([0,1,2,3],[[4.3,3.2],[1.4,5.6],[6.,2.5],[4.5,5.4]]),
dtype=[('id','int8'),('pos','2float16')]
)
my_new_field = np.ones(
len(my_structured_array),
dtype='2int8'
)
my_appended_array = append_fields(
my_structured_array,
'new',
data=my_new_field
)
ValueError: オペランドはシェイプ (4) (4,2) と一緒にブロードキャストできませんでした
何か案は?タプルのリストを作成my_new_field
し、適切な形状の dtype 引数を append_fields() に入れてみました。
my_new_field = len(my_structured_array)*[(1,1)]
my_appended_array = append_fields(
my_structured_array,
'new',
data=my_new_field,
dtype='2int8'
)
しかし、それがnumpy配列に変換されると、それは同じになるようです。
単に append_fields() の代わりに rec_append_fields() を使用しても、これは何も変わらないようです
編集:私の新しいフィールドが私の配列と同じ形状を持っていないという事実に照らして、私は@radicalbiscuitによって提案された私の望ましい追加は不可能だと思います。
In : my_new_field.shape
Out: (4, 2)
In : my_structured_array.shape
Out: (4,)
ただし、元の配列とは異なる形状の元のフィールドの 1 つを配列に含めて、フィールドが構造化配列と同じ形状である必要はありません。このようなフィールドを追加するにはどうすればよいですか?
In : my_structured_array['pos'].shape
Out: (4, 2)
In : my_new_field.shape
Out: (4, 2)
私のアプリケーションでは、後で何らかの方法で形状を変更できる限り、空のフィールドを追加できることに注意してください。ありがとう!