numpyのアレイ、ある拡張型(別名拡張でC APIを使用して定義された)、numpyののarray interfaceに記載されているように、Buffer Structure
(例えばdata
属性、Pythonインタプリタの範囲外の追加フィールドを宣言する。
にPickle protocol
部(__reduce__
は依然としてのPython 3に存在する場合でも、それをシリアライズすることができ、Pythonの2 docに述べたように、ピックルプロトコルの一部として__reduce__
機能を使用するために使用され、hereを説明する。Python 3はどのように拡張タイプ、特にNumpy配列をpickleするのか知っていますか?
しかしそしてPickling and unpickling extension types
)がdocから削除されたので、何が何をするのかは不明です。
はまた、酸洗拡張タイプに関連する追加エントリがある:
-
copyreg
- 、
Pickle interface constructor registration for extension types
として説明したが、copyregモジュール自体で拡張タイプの言及はありません。 - PEP 3118 -- Revising the buffer protocolこれはPython 3の新しいバッファプロトコルをリリースしました(そしておそらく、このバッファプロトコルのための酸洗いを自動化します)。
- 新しいスタイルクラス:新しいスタイルのクラスが酸洗プロセスに影響を与えると考えることができます。
だから、どのようにこのすべてnumpyのアレイに関連しています:
- numpyの配列は、それら(または
copyreg
)をpickle化する方法でPythonを知らせるために、このような__reduce__
のような特別なメソッドを実装していますか? Numpyオブジェクトはまだ__reduce__
メソッドを公開していますが、これは互換性のためです。 - NumpyはPickle(新しい
buffer protocol
のような)のボックスの外でサポートされているPythonのC-API構造体を使用しているので、numpy配列を漬け込むために補足は必要ありませんか?
'__reduce__'はまだPython 3に存在します。 –
.. [ここにはPython 3で' __reduce__'が記述されているドキュメントがあります](https://docs.python.org/3/library/pickle。 html?highlight = pickle#オブジェクト.__ reduce__)。 – Phillip
ポイントは、 'reduce'がまだ存在していても、' reduce'文書内の拡張タイプへの言及が削除されていることです。しかし、それは受け入れられた答え(そして次のコメント)で述べられているように、まだ真実であると言われました。 – Phylliade