teratail header banner
teratail header banner
質問するログイン新規登録

質問編集履歴

4

試したことの追加など

2021/10/18 00:31

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -1,24 +1,20 @@
1
1
  ### Python 実行速度を高速化し、時間短縮したいです!
2
-
3
2
  今の書き方では、何日待っても終わらないため、
4
3
  もっと早く終わるように高速化(最適化)したいです!
5
4
 
6
5
  【追記】
7
6
  やっていることは、
8
7
  ①(AからN列・1から6362行)のcsvファイルを読み込む
9
- ②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たすデータのみを抽出する
8
+ ②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たす行(データのみを抽出する
10
- ③抽出したデータにおけるA列の合計値を求める
9
+ ③抽出した行(データにおけるA列の合計値を求める
11
10
  (「〇以下」の〇の値を一つずつ変えて全通りの条件において、A列の合計値を求める)
12
11
  ④Aの合計値が23を超える場合のみ、その条件と値を出力する
13
12
 
14
13
  ### 発生している問題・エラーメッセージ
15
-
16
14
  ```
17
15
  今の処理を高速化したいです!
18
16
  ```
19
-
20
17
  ### 該当のソースコード
21
-
22
18
  ```Python
23
19
  import numpy
24
20
  from numba import jit, prange
@@ -45,11 +41,9 @@
45
41
  print(c, d, e, f, g, h, i, j, k, l, m, n, score2)
46
42
  hello()
47
43
  ```
48
-
49
44
  ### 試したこと
45
+ Cythonを試しましたが、処理速度はnumbaの方が速かったです。
46
+ またpythonよりも実行速度が速いC++やGoやJavaで実現しようとしましたが、pythonのようなデータフレーム機能が見当たらなかったため実現できませんでした。
50
47
 
51
- pythonよりも実行速度が速いC++やGoやJavaで実現しようとしましたが、pythonのようなデータフレーム機能が見当たらなかったため実現できませんでした。
52
-
53
48
  ### 補足情報(FW/ツールのバージョンなど)
54
-
55
49
  pythonでなくても今と同じ結果が得られるのであれば手段は問いません。pythonでの高速化もしくは他の言語での実現について、ご教授いただけると幸いです。何卒よろしくお願いいたします。

3

タグを変更しました!

2021/10/18 00:31

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
File without changes

2

ソースコードを変更しました。pandas→numbaに変更することで実行速度が速くなりました!

2021/10/14 21:41

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -20,28 +20,30 @@
20
20
  ### 該当のソースコード
21
21
 
22
22
  ```Python
23
- import pandas as pd
24
- import numpy as np
23
+ import numpy
25
- from pprint import pprint
24
+ from numba import jit, prange
26
25
 
27
- df = pd.read_csv('sample.csv')
26
+ score = numpy.loadtxt('sample.csv', delimiter=',', encoding='utf_8')
28
27
 
29
- for c in range(0, 11):
30
- for d in range(0, 4):
31
- for e in range(0, 4):
32
- for f in range(0, 12):
33
- for g in range(0, 12):
34
- for h in range(0, 19):
35
- for i in range(0, 334):
36
- for j in range(0, 235):
37
- for k in range(0, 552):
38
- for l in range(0, 25):
39
- for m in range(0, 32):
40
- for n in range(0, 43):
41
- dftemp = df.query('C <= @c and D <= @d and E <= @e and F <= @f and G <= @g and H <= @h and I <= @i and J <= @j and K <= @k and L <= @l and M <= @m and N <= @n')
42
- if dftemp['A'].sum() > 23:
43
- ms = dftemp['A'].sum()
44
- print(c, d, e, f, g, h, i, j, k, l, m, n, ms)
28
+ @jit(nopython=True, parallel=True)
29
+ def hello():
30
+ for c in prange(0, 11):
31
+ for d in prange(0, 4):
32
+ for e in prange(0, 4):
33
+ for f in prange(0, 12):
34
+ for g in prange(0, 12):
35
+ for h in prange(0, 19):
36
+ for i in prange(0, 334):
37
+ for j in prange(0, 235):
38
+ for k in prange(0, 552):
39
+ for l in prange(0, 25):
40
+ for m in prange(0, 32):
41
+ for n in prange(0, 43):
42
+ 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)]
43
+ if numpy.sum(score1[:, 0]) > 23:
44
+ score2 = numpy.sum(score1[:, 0])
45
+ print(c, d, e, f, g, h, i, j, k, l, m, n, score2)
46
+ hello()
45
47
  ```
46
48
 
47
49
  ### 試したこと

1

何をやっているか(何を求めたいか)を追加しました!

2021/10/12 00:26

投稿

obahaya
obahaya

スコア1

title CHANGED
File without changes
body CHANGED
@@ -3,6 +3,14 @@
3
3
  今の書き方では、何日待っても終わらないため、
4
4
  もっと早く終わるように高速化(最適化)したいです!
5
5
 
6
+ 【追記】
7
+ やっていることは、
8
+ ①(AからN列・1から6362行)のcsvファイルを読み込む
9
+ ②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たすデータのみを抽出する
10
+ ③抽出したデータにおけるA列の合計値を求める
11
+ (「〇以下」の〇の値を一つずつ変えて全通りの条件において、A列の合計値を求める)
12
+ ④Aの合計値が23を超える場合のみ、その条件と値を出力する
13
+
6
14
  ### 発生している問題・エラーメッセージ
7
15
 
8
16
  ```