2

にデータがありnumpy.recarray、その列の一部を抽出したいとします。データが膨大になる可能性があるため (すべてをコピーしたくない)、これを効果的なコピーにしたいと考えていますが、これらの機能を変更したくなくても変更する可能性がありますdata(ビューは必要ありません)。

今日、私は次のことを行います。

data = np.array([(1.0, 2.0, 0), (3.0, 4.0, 1)], 
            dtype=[('feature_1', float), ('feature_2', float), ('result', int)])
data = data.view(np.recarray)

features = data[['feature_1', 'feature_2']]

ただし、FutureWarningNumPy からは次のようになります。

/path/to/numpy/core/records.py:513: FutureWarning: Numpy は、構造化された配列で複数のフィールドを選択することによって返された配列を表示または書き込みしている可能性があることを検出しました。

このコードは numpy 1.15 で壊れる可能性があります。これは、コピーではなくビューを返すためです。詳細については、リリース ノートを参照してください。

return obj.view(dtype=(self.dtype.type, obj.dtype))

NumPy を更新するときに重大な変更を加えたくないので、この警告は大歓迎です。ただし、リリース ノートを調べても、今日の時点で列を抽出する際にこのコピー動作を実装し、今後のリリースで安定するものを作成するための最良のソリューションが何であるかは明確ではありません。

私の特定のケースでは、最適に近い効率が必要であり、Pandas は利用できません。これらの状況で、この状況の最善の回避策は何でしょうか?

4

2 に答える 2