0

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)

では、レコード配列の実際のベースを見つけるにはどうすればよいでしょうか。

4

1 に答える 1