私は大量の大量の配列を扱っています。最近、あまりにも多くのメモリを噛んでしまいましたので、それらをnumpy.memmap
インスタンスに置き換えたかったのです。問題は、今、私は配列のサイズを変更する必要があり、私はその場所で行うことをお勧めします。これは普通の配列ではうまくいきましたが、memmapsでこれを試してみると、データが共有され、refcheckを無効にしても役立たないという不満があります。numpy.memmapの配列のサイズ変更
a = np.arange(10)
a.resize(20)
a
>>> array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a = np.memmap('bla.bin', dtype=int)
a
>>> memmap([0, 0, 0, 0, 0, 0, 0, 0, 0, 0])
a.resize(20, refcheck=False)
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-41-f1546111a7a1> in <module>()
----> 1 a.resize(20, refcheck=False)
ValueError: cannot resize this array: it does not own its data
下位のmmapバッファのサイズを変更すると、問題なく動作します。問題は、これらの変更を配列オブジェクトに反映させる方法です。私はこのworkaroundを見たことがありますが、残念ながら、配列の位置は変更されません。 mmapのサイズ変更についてはnumpy documentationもありますが、少なくともバージョン1.8.0では明らかに動作しません。他のアイデア、どのようにinbuiltのサイズ変更チェックをオーバーライドするには?
私は何かが欠けする必要がありますように...このコードは私のために正常に実行さを感じます。それはあなたのために実行されますか?これはあなたがしたいことではありませんか? http://codepad.org/eEWmYBHZ –
@three_pineapples彼は配列の合計サイズを変更したい - あなたのコードはちょうどそれを再構成する –
@ali_mああ、私は参照してください。私は質問からそれを得ませんでしたが、私が言ったように、私は何かが欠けていると思った! –