次の 2 つのマスクされた配列宣言があるとします。
arr1 = ma.array([(1,2,"hello"),(10,20,"world!")],dtype=[("p1",int),("p2",float),("p3",object)])
arr1.mask["p1"][0] = True
arr1.mask["p2"][1] = True
arr2 = ma.array([(1,2,3),(10,20,30)],dtype=[("p1",int),("p2",float),("p3",int)])
arr2.mask["p1"][0] = True
arr2.mask["p2"][1] = True
ご覧のとおり、唯一の (わずかな?) 違いは、「p3」フィールドが のオブジェクトでarr1
あり、 の int であることですarr2
。
通話arr2[0]
OKです(--, 2.0, 3)
。
ただし、 の一部の要素をマスクするとarr1
、 を呼び出すとarr1[0]
次のエラーが発生します。
*** ValueError: Setting void-array with object members using buffer.
明らかに、1 つのフィールドをオブジェクトとして宣言すると、いくつかの問題が発生しますが、その理由はまったくわかりません。
これについてどう思いますか?その方法で「arr1[0]」にアクセスする必要があることを念頭に置いて、その問題を回避する方法をいくつか見つけてください。
どうもありがとう
エリック
編集: この問題は numpy バージョン < 1.8 で発生します。最新バージョン(1.8)で試してみましたが、問題ありません。