Python 実行速度を高速化し、時間短縮したいです!
今の書き方では、何日待っても終わらないため、
もっと早く終わるように高速化(最適化)したいです!
【追記】
やっていることは、
①(AからN列・1から6362行)のcsvファイルを読み込む
②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たす行(データ)のみを抽出する
③抽出した行(データ)におけるA列の合計値を求める
(「〇以下」の〇の値を一つずつ変えて全通りの条件において、A列の合計値を求める)
④Aの合計値が23を超える場合のみ、その条件と値を出力する
発生している問題・エラーメッセージ
今の処理を高速化したいです!
該当のソースコード
Python
1import numpy 2from numba import jit, prange 3 4score = numpy.loadtxt('sample.csv', delimiter=',', encoding='utf_8') 5 6@jit(nopython=True, parallel=True) 7def hello(): 8 for c in prange(0, 11): 9 for d in prange(0, 4): 10 for e in prange(0, 4): 11 for f in prange(0, 12): 12 for g in prange(0, 12): 13 for h in prange(0, 19): 14 for i in prange(0, 334): 15 for j in prange(0, 235): 16 for k in prange(0, 552): 17 for l in prange(0, 25): 18 for m in prange(0, 32): 19 for n in prange(0, 43): 20 score1 = score[(score[:, 2] <= c) & (score[:, 3] <= d) & (score[:, 4] <= e) & (score[:, 5] <= f) & (score[:, 6] <= g) & (score[:, 7] <= h) & (score[:, 8] <= i) & (score[:, 9] <= j) & (score[:, 10] <= k) & (score[:, 11] <= l) & (score[:, 12] <= m) & (score[:, 13] <= n)] 21 if numpy.sum(score1[:, 0]) > 23: 22 score2 = numpy.sum(score1[:, 0]) 23 print(c, d, e, f, g, h, i, j, k, l, m, n, score2) 24hello()
試したこと
Cythonを試しましたが、処理速度はnumbaの方が速かったです。
またpythonよりも実行速度が速いC++やGoやJavaで実現しようとしましたが、pythonのようなデータフレーム機能が見当たらなかったため実現できませんでした。
補足情報(FW/ツールのバージョンなど)
pythonでなくても今と同じ結果が得られるのであれば手段は問いません。pythonでの高速化もしくは他の言語での実現について、ご教授いただけると幸いです。何卒よろしくお願いいたします。
回答1件
あなたの回答
tips
プレビュー