私は最近、コーディング時間を数分の1に短縮できるため、c/c++の代わりにPythonをますます使用しています。同時に、大量のデータを処理していると、Python プログラムの実行速度が c よりも大幅に遅くなり始めます。これは、大きなオブジェクト/配列を非効率的に使用しているためかどうか疑問に思っています。numpy/python によるメモリの処理方法に関する包括的なガイドはありますか? 物事が参照によって渡されるときと値によって渡されるとき、物事がコピーされるときとそうでないとき、どの型が変更可能で、どの型がそうでないか。
2 に答える
彼の答えは非常に関連性があると思うので、これについてEOLを引用する必要があります。
3) 最後のポイントは質問のタイトルに関連しています。「値渡し」と「参照渡し」は、Python に関連する概念ではありません。関連する概念は、代わりに「可変オブジェクト」と「不変オブジェクト」です。リストは変更可能ですが、数字はそうではありません。これは、観察したことを説明しています。また、 Person1 および bar1 オブジェクトは変更可能です (そのため、人の年齢を変更できます)。これらの概念の詳細については、テキスト チュートリアルとビデオ チュートリアルを参照してください。ウィキペディアには、(より技術的な) 情報もあります。ミュータブルとイミュータブルの動作の違いを示す例 - EOL による回答
一般的に、Numpy/Scipy がこれらに従っていることがわかりました。さらに重要なことに、何が起こっているのかをドキュメントで明示的に伝えます。
たとえば
np.random.shuffle
、入力配列を要求して戻り、配列None
をnp.random.permutation
返します。値を返すものと返さないものを明確に確認できます。
同様に、配列には参照渡しのセマンティクスがあり、一般的にNumpy/Scipy
非常に効率的です。
使用する方が高速であれば、使用すると言っても過言ではないと思いますpass-by-reference
。ドキュメントに書かれているとおりに関数を使用する限り、速度に関して重大な問題は発生しないはずです。
あなたが尋ねている特定のタイプはありますか?