質問編集履歴

4

試したことの追加など

2021/10/18 00:31

投稿

obahaya
obahaya

スコア1

test CHANGED
File without changes
test CHANGED
@@ -1,6 +1,4 @@
1
1
  ### Python 実行速度を高速化し、時間短縮したいです!
2
-
3
-
4
2
 
5
3
  今の書き方では、何日待っても終わらないため、
6
4
 
@@ -14,9 +12,9 @@
14
12
 
15
13
  ①(AからN列・1から6362行)のcsvファイルを読み込む
16
14
 
17
- ②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たすデータのみを抽出する
15
+ ②CからN列の値を用いて、【Cが〇以下かつDが○以下かつ・・・Nが○○以下】と条件を指定し、その条件を満たす行(データのみを抽出する
18
16
 
19
- ③抽出したデータにおけるA列の合計値を求める
17
+ ③抽出した行(データにおけるA列の合計値を求める
20
18
 
21
19
  (「〇以下」の〇の値を一つずつ変えて全通りの条件において、A列の合計値を求める)
22
20
 
@@ -26,19 +24,13 @@
26
24
 
27
25
  ### 発生している問題・エラーメッセージ
28
26
 
29
-
30
-
31
27
  ```
32
28
 
33
29
  今の処理を高速化したいです!
34
30
 
35
31
  ```
36
32
 
37
-
38
-
39
33
  ### 該当のソースコード
40
-
41
-
42
34
 
43
35
  ```Python
44
36
 
@@ -92,18 +84,14 @@
92
84
 
93
85
  ```
94
86
 
95
-
96
-
97
87
  ### 試したこと
98
88
 
89
+ Cythonを試しましたが、処理速度はnumbaの方が速かったです。
99
90
 
100
-
101
- pythonよりも実行速度が速いC++やGoやJavaで実現しようとしましたが、pythonのようなデータフレーム機能が見当たらなかったため実現できませんでした。
91
+ またpythonよりも実行速度が速いC++やGoやJavaで実現しようとしましたが、pythonのようなデータフレーム機能が見当たらなかったため実現できませんでした。
102
92
 
103
93
 
104
94
 
105
95
  ### 補足情報(FW/ツールのバージョンなど)
106
96
 
107
-
108
-
109
97
  pythonでなくても今と同じ結果が得られるのであれば手段は問いません。pythonでの高速化もしくは他の言語での実現について、ご教授いただけると幸いです。何卒よろしくお願いいたします。

3

タグを変更しました!

2021/10/18 00:31

投稿

obahaya
obahaya

スコア1

test CHANGED
File without changes
test CHANGED
File without changes

2

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

2021/10/14 21:41

投稿

obahaya
obahaya

スコア1

test CHANGED
File without changes
test CHANGED
@@ -42,49 +42,53 @@
42
42
 
43
43
  ```Python
44
44
 
45
- import pandas as pd
45
+ import numpy
46
46
 
47
- import numpy as np
48
-
49
- from pprint import pprint
47
+ from numba import jit, prange
50
48
 
51
49
 
52
50
 
53
- df = pd.read_csv('sample.csv')
51
+ score = numpy.loadtxt('sample.csv', delimiter=',', encoding='utf_8')
54
52
 
55
53
 
56
54
 
57
- for c in range(0, 11):
55
+ @jit(nopython=True, parallel=True)
58
56
 
59
- for d in range(0, 4):
57
+ def hello():
60
58
 
61
- for e in range(0, 4):
59
+ for c in prange(0, 11):
62
60
 
63
- for f in range(0, 12):
61
+ for d in prange(0, 4):
64
62
 
65
- for g in range(0, 12):
63
+ for e in prange(0, 4):
66
64
 
67
- for h in range(0, 19):
65
+ for f in prange(0, 12):
68
66
 
69
- for i in range(0, 334):
67
+ for g in prange(0, 12):
70
68
 
71
- for j in range(0, 235):
69
+ for h in prange(0, 19):
72
70
 
73
- for k in range(0, 552):
71
+ for i in prange(0, 334):
74
72
 
75
- for l in range(0, 25):
73
+ for j in prange(0, 235):
76
74
 
77
- for m in range(0, 32):
75
+ for k in prange(0, 552):
78
76
 
79
- for n in range(0, 43):
77
+ for l in prange(0, 25):
80
78
 
81
- 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')
79
+ for m in prange(0, 32):
82
80
 
83
- if dftemp['A'].sum() > 23:
81
+ for n in prange(0, 43):
84
82
 
85
- ms = dftemp['A'].sum()
83
+ 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)]
86
84
 
85
+ if numpy.sum(score1[:, 0]) > 23:
86
+
87
+ score2 = numpy.sum(score1[:, 0])
88
+
87
- print(c, d, e, f, g, h, i, j, k, l, m, n, ms)
89
+ print(c, d, e, f, g, h, i, j, k, l, m, n, score2)
90
+
91
+ hello()
88
92
 
89
93
  ```
90
94
 

1

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

2021/10/12 00:26

投稿

obahaya
obahaya

スコア1

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