質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.40%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

5回答

450閲覧

pythonとコンパイラ言語の両方を使ってる方へ質問です

kakini

総合スコア40

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2024/07/14 08:23

現在pythonを使っているのですが
最近pandasを使った計算をさせる時に処理速度が遅いのに悩まされています
そこで気になったのですが

pythonはインタプリタ型だから実行速度が遅いと言われてますが
コンパイラ型言語(種類は何でもいいです)はどの位早いのでしょうか?
回答主が使われてる言語の例で構わないので
同じ処理でもインタプリタとコンパイラだと何倍位処理速度が違うのか教えて頂きたいです

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答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

otn

総合スコア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

ujimushi_sradjp

総合スコア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
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

インタプリタとコンパイラだと何倍位処理速度が違うのか

一概には言えません。 書きかたによります。

pandasを使った計算をさせる時に処理速度が遅い

pandasでは、同じ処理でも書きかたによって実行速度が大きく違ったりします。
pandasを使っていて遅いのであれば、まずはそのあたりを見直してみるのがいいと思います。 検索するといろいろ出てきます。

pythonだと遅いのでコンパイルできる言語に書き換えるとしても、書き換えた処理がpandasよりも早くなるかどうかは、先に書いたように言語の種類に依存するわけではないので保証はありませんし、pandasのような使いやすい物になる可能性は低いでしょう。

投稿2024/07/14 08:51

TakaiY

総合スコア13337

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

質問の内容を見ますと「pythonとコンパイラ言語の速度差」の問題ではなく、Pandasモジュールの使い方の問題ではないでしょうか?処理内容の具体的なコードや説明が無いためそうではない可能性もありますが、今一度Pandasの使い方を調査されると良いかと思います。経験的にもコードの書き方で処理速度が数分→数秒になることはよくあります。

投稿2024/07/14 08:48

meg_

総合スコア10648

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.40%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問