base
レコード配列のはどのように決定されますか? ドキュメントは通常の配列と同じ動作を説明しているようですが、それはそうではありません。これは単純な配列と、そこから作成されたレコード配列です。
>>> arr = np.zeros(10, dtype=[('a', float), ('b', int), ('c', int)])
>>> rec = arr.view(np.recarray)
レコード配列のベースが正しく設定されている
>>> arr is rec
False
>>> arr is rec.base
True
はbase
、通常の配列のフィールド アクセスに対して正しく設定されます。
>>> arr['a'].base is arr
True
ただし、レコード配列の場合、ベースが何であるかを判断できません。None
私が試したのは、通常の配列、レコード配列、またはその他のものではありません。
>>> rec['a'].base is arr
False
>>> rec['a'].base is rec
False
>>> rec['a'].base is None
False
>>> rec['a'].base is rec['a']
False
>>> rec['a'].base is rec['a'].base
False
>>> f = rec['a']
>>> f.base is f
False
スライスのインデックス作成で期待どおりに動作します
>>> arr[:3].base is arr
True
>>> rec[:3].base is rec
True
そして、それは間違いなくまだ同じメモリを指しています
>>> arr[0]
(0., 0, 0)
>>> rec['a'] = 1
>>> arr[0]
(1., 0, 0)
では、レコード配列の実際のベースを見つけるにはどうすればよいでしょうか。