numpyオブジェクトがビューであるかどうかを確実に識別する方法を探します。numpy:numpy配列がビューの場合は、信頼できる(非保守的)インジケータ
関連の質問は(here、here、here)の前に何度も出ている、と人々は、いくつかのソリューションを提供してきましたが、すべての問題を持っているように見える:
- 今
pandas
で使用されるテストは、何かを呼び出すことですビューの場合はmy_array.base is not None
です。これはいつもビューを捕まえるように見えるだけでなく、誤ったポジティブなものもたくさんあります。 numpy.may_share_memory()
は(?@RobertKurnは2012年のように最適なツールだったと言い - すべての変更)の2つの特定の配列をチェックしますが、一般的に- に答えています
flags['OWNDATA'])
をして失敗するreported (third comment first answer)ですある場合。あなたの用法に応じて、
(私の興味の理由は、私はパンダのためのコピー・オン・ライトの実装に取り組んでいる、と保守的な指標は過コピーにつながっているということです。)
numpy github trackerに関する適切なディスカッション:https://github.com/numpy/numpy/issues/5604 –
偽陽性として記述された状況は、「コピーを作成する」操作が実際にコピー。これを "ビューではない"と見なす場合は、配列の 'base'の参照数をチェックして他の参照があるかどうかを調べることもできますが、完全ではありません。私はこの種のものを確実に検出することは可能ではないと思う。 – user2357112
また、この最近のSOの質問、http://stackoverflow.com/questions/33467477/how-to-find-all-variables-with-identical-idを参照してください。新しい関数 'np.shares_memory'が書かれています。しかし、私は2つの既知の変数を比較することが1つあり、配列はデータバッファを他の配列と共有していることを尋ねることがあります。 – hpaulj