17

私は最近、コーディング時間を数分の1に短縮できるため、c/c++の代わりにPythonをますます使用しています。同時に、大量のデータを処理していると、Python プログラムの実行速度が c よりも大幅に遅くなり始めます。これは、大きなオブジェクト/配列を非効率的に使用しているためかどうか疑問に思っています。numpy/python によるメモリの処理方法に関する包括的なガイドはありますか? 物事が参照によって渡されるときと値によって渡されるとき、物事がコピーされるときとそうでないとき、どの型が変更可能で、どの型がそうでないか。

4

2 に答える 2

2

彼の答えは非常に関連性があると思うので、これについてEOLを引用する必要があります。

3) 最後のポイントは質問のタイトルに関連しています。「値渡し」と「参照渡し」は、Python に関連する概念ではありません。関連する概念は、代わりに「可変オブジェクト」と「不変オブジェクト」です。リストは変更可能ですが、数字はそうではありません。これは、観察したことを説明しています。また、 Person1 および bar1 オブジェクトは変更可能です (そのため、人の年齢を変更できます)。これらの概念の詳細については、テキスト チュートリアルとビデオ チュートリアルを参照してください。ウィキペディアには、(より技術的な) 情報もあります。ミュータブルとイミュータブルの動作の違いを示す例 - EOL による回答

一般的に、Numpy/Scipy がこれらに従っていることがわかりました。さらに重要なことに、何が起こっているのかをドキュメントで明示的に伝えます。

たとえば np.random.shuffle、入力配列を要求して戻り、配列Nonenp.random.permutation返します。値を返すものと返さないものを明確に確認できます。

同様に、配列には参照渡しのセマンティクスがあり、一般的にNumpy/Scipy非常に効率的です。

使用する方が高速であれば、使用すると言っても過言ではないと思いますpass-by-reference。ドキュメントに書かれているとおりに関数を使用する限り、速度に関して重大な問題は発生しないはずです。


あなたが尋ねている特定のタイプはありますか?

于 2013-08-03T20:30:25.747 に答える