次のコードを検討してください。
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つのことを達成しようとしています:
- クラス インスタンスのメタデータを保持します。スライスは機能しますが、他の形式のコピーについてはわかりません。
- 元の配列が自由にガベージ コレクションできるようにする