現在pythonを使っているのですが
最近pandasを使った計算をさせる時に処理速度が遅いのに悩まされています
そこで気になったのですが
pythonはインタプリタ型だから実行速度が遅いと言われてますが
コンパイラ型言語(種類は何でもいいです)はどの位早いのでしょうか?
回答主が使われてる言語の例で構わないので
同じ処理でもインタプリタとコンパイラだと何倍位処理速度が違うのか教えて頂きたいです
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
![guest](/img/icon/icnUserSample.jpg)
回答5件
0
他の方に同意です。
Pandasのライブラリの中味を覗いたことはないですが、ライブラリの中で速度が問題になるような部分はPythonでなくCで書かれているはずです。Python+Pandasを全部Cで書き直すとして、Pandasの開発者と同レベルのスキルがないと速度で上回ることは難しいかと思います。
「Pandasのメソッドに任せておけば良いことを、自分のPythonコードで書いている」ということがないかを見直すだけで、速くなると思いますよ。もちろん、同じ事を実現するのに複数のやり方があるのが普通なので、どの方法が分かり易いコードになるか、どの方法が実行時間が速いかなどを常に複数の中から選ぶのもいいでしょう。
pythonはインタプリタ型だから実行速度が遅いと言われてますが
コンパイラ言語、インタープリター言語の区分はあまり意味がなくなっており、無理に区別すると、
・コンパイラ言語・・・・コンパイル結果を別のファイルに書き出して、別途、そのファイルを実行する言語
・インタープリター言語・・・・コンパイル結果をメモリー上に置いて、コンパイルに引き続き、直接そのメモリー上のコンパイル結果を実行する言語
でしょうか。
コンパイラ言語のコンパイル&リンク結果は、Cのようにその実CPUの機械語の事もあれば、
Javaのようにコンパイル結果がJavaVMという仮想的なCPUの実行コードで、実際の実行はその実CPU用に作られたJavaVMがコンパイル結果の仮想機械語コードを解釈しながら実行するという2パターンがあります。
インタープリター言語の場合は、メモリ上に置かれるコンパイル結果は実CPUの機械語というケースは多くなく、何らかの仮想CPUの仮想機械語にコンパイルされます。言語によっては、それのもっと手前の構文解析結果(構文木)くらいしか作らない場合もあります(この場合は実行は、より遅いはず)。言語やバージョン・オプションによっては、仮想CPUの仮想機械語から部分的にさらに実CPUの機械語に変換してから実行するケースもあります。
オブジェクト指向言語の場合、静的型か動的型かによって、メソッド呼び出しのオーバヘッドが違うので、これも速度に影響します。Pythonのように型ヒントを書ける場合は、全てにつけると、メソッド呼び出しのオーバヘッドが減少するかもしれません(どれくらいの効果かは調べてない)。
投稿2024/07/14 10:29
総合スコア85458
0
コンパイル言語はどのぐらい速いのか?
それは結構pandasモジュール内での分析だけで比較可能ではないでしょうか?他の回答者のおっしゃる通り,pandasはPythonのコードの部分とnumpy等のC言語でコンパイルしたモジュールとのハイブリッドになっています。
例としてZennに1000倍の速度差が出てしまうコードの違いという記事があります。
「C言語部分(記事ではVecotrization)を利用する・しない」で速度が1000倍違うという内容のようですね。
また,もし遅いと思うなら他のモジュールも検討してみてはどうでしょうか?
Database-like ops benchmarkはSQLiteのOLAP版みたいなDuckDBのポジショントーク的なベンチマークの一覧で,統計処理に利用されるR言語やPython,Julia言語のモジュールなどの実行時間が比較されています。
SQLが得意なデータベース処理に限ればPandasよりも高速なモジュールがいくつかあることが分かるかと思います。図で比較できるので質問者にもイメージしやすいのではないかと思います。
Polarsはpandasとそれほど違和感なく使えるでしょうし,SQLが使えるならDuckDBのPythonバインディングを使うという選択肢もあるでしょう。
投稿2024/07/23 13:22
総合スコア2124
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
回答ではありません
何のコードも書かずにこの手の質問をする人にロクな人がいないと思うのですが、回答する方もいるので、一応書いておきます。pandas/polars辺りは書き方で大きく処理時間が違うのは他の方のおっしゃるとおりです。速度は書き方もあるけど、処理内容でボトルネックになる部分も違います。ざっくり言えばpythonだとCPUバウンドな処理はGILのため複数スレッドが遅くなるし、プロセスで分けるとそのオーバーヘッドはスレッドより大きいので並列処理が苦手です(numpyとかはnativeで無理をしたりもする)。
一口にpythonと言っても、CPython以外の処理系がいくつかあり、それによっても速度(と機能)が違います。例えば
python
1import time 2v = 1 3N = int(input()) 4s = time.monotonic() 5for _ in range(N): 6 v *= 2 7 v %= 3 8e = time.monotonic() 9print(f'result={v},time={e-s}')
こんなゴミみたいなコードを、Linux上で走らせたとき
console
1$ docker run -it --rm -v $(pwd):/home/python -w /home/python python bash -c 'echo 100000000 | python hoge.py' 2result=1,time=21.78108796699962 3$ docker run -it --rm -v $(pwd):/home/python -w /home/python pypy bash -c 'echo 100000000 | python hoge.py' 4result=1,time=0.7262183759885374 5$
このpythonコードをcythonを使って処理すると、
console
1$ mv hoge.py hoge.pyx 2$ docker run -it --rm -v $(pwd):/home/python -w /home/python python bash -c 'pip install cython;cythonize -a -i hoge.pyx;echo 100000000 | python -c "import hoge"' 3... 4result=1,time=14.275351718999445 5$
こんな感じになります。
cythonはCのコードを吐いてコンパイルすることになるので、コンパイラ言語と同じと言ってもいいでしょう。でも処理内容なpythonなのでほとんどの場合そのままではほとんど速くなりません。
同じ処理をC++で書き直すとこうなります。
c++
1#include <iostream> 2#include <chrono> 3using namespace std::chrono; 4int main() { 5 int N, v = 1; 6 std::cin >> N; 7 auto s = high_resolution_clock::now(); 8 for (int i = 0; i < N; ++i) { 9 v *= 2; 10 v %= 3; 11 } 12 auto e = high_resolution_clock::now(); 13 std::cout << "result=" << v << ",time=" << duration_cast<nanoseconds>(e-s).count()/1000000000. << std::endl; 14 return 0; 15}
これを実行すると
c++
1docker run -it --rm -v $(pwd):/home/gcc -w /home/gcc gcc bash -c 'g++ -g -O3 hoge.cpp -o hoge;echo 100000000 | ./hoge' 2... 3result=1,time=0.345553
これで何か分かったかというと、調べた限りではこうなった、以外の結論は出ません。
何の条件も付けずにコンパイル言語と非コンパイル言語でパフォーマンスがどれくらい違うかと言われても、さぁ?としか言えない、ということです。
投稿2024/07/14 14:24
編集2024/07/14 14:27![退会済みユーザー](https://ddjkaamml8q8x.cloudfront.net/profileImages/deletedUser/icnUserSample.jpeg)
退会済みユーザー
総合スコア0
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
0
インタプリタとコンパイラだと何倍位処理速度が違うのか
一概には言えません。 書きかたによります。
pandasを使った計算をさせる時に処理速度が遅い
pandasでは、同じ処理でも書きかたによって実行速度が大きく違ったりします。
pandasを使っていて遅いのであれば、まずはそのあたりを見直してみるのがいいと思います。 検索するといろいろ出てきます。
pythonだと遅いのでコンパイルできる言語に書き換えるとしても、書き換えた処理がpandasよりも早くなるかどうかは、先に書いたように言語の種類に依存するわけではないので保証はありませんし、pandasのような使いやすい物になる可能性は低いでしょう。
投稿2024/07/14 08:51
総合スコア13337
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。