次のコードを検討してください。
import numpy as np
a = np.zeros(50)
a[10:20:2] = 1
b = c = a[10:40:4]
print b.flags # You'll see that b and c are not C_CONTIGUOUS or F_CONTIGUOUS
私の質問:
b
と の両方b
をc
連続させる方法はありますか ( への参照のみ)。この操作でnp.may_share_memory(b,a)
戻ってきたら全然大丈夫です。False
近いがうまくいかないものは次のとおりです。 np.ascontiguousarray
/新しい配列np.asfortranarray
を返すため。
私の使用例は、非常に大きな 3D フィールドが a のサブクラスに格納されている場合ですnumpy.ndarray
。メモリを節約するために、これらのフィールドを、実際に処理したいドメインの部分に切り詰めたいと思います。
a = a[ix1:ix2,iy1:iy2,iz1:iz2]
サブクラスのスライスは、オブジェクトのスライスよりもいくらか制限されてndarray
いますが、これは機能するはずであり、「正しいことを行います」 - サブクラスに添付されたさまざまなカスタム メタデータは、期待どおりに変換/保持されます。残念ながら、これは を返すためview
、numpy は後で大きな配列を解放しないため、実際にはここでメモリを節約しません。
完全に明確にするために、私は2つのことを達成しようとしています:
- クラス インスタンスのメタデータを保持します。スライスは機能しますが、他の形式のコピーについてはわかりません。
- 元の配列が自由にガベージ コレクションできるようにする