質問編集履歴

1

コードを文字で説明しました。

2020/04/20 21:06

投稿

tomatocco
tomatocco

スコア24

test CHANGED
File without changes
test CHANGED
@@ -12,6 +12,8 @@
12
12
 
13
13
  素人なりになんとかコード作成することができました。高速化を可能にしたいとnumbaを用いてみましたがうまくいきません。
14
14
 
15
+ numba以外の方法での高速化でもかまいません。
16
+
15
17
  ご教授頂きたくよろしくお願いいたします。
16
18
 
17
19
 
@@ -80,17 +82,41 @@
80
82
 
81
83
  ```ここに言語名を入力
82
84
 
83
- 下記コードの高速化のために「if X==10:」の前に
85
+
84
-
85
- @jit
86
+
86
-
87
- def kumiawase_numba():
88
-
89
- を導入しまし
87
+ 〈行いいこと〉
88
+
90
-
89
+ 組み合わせたいデータはexcel表に記載し、pythonを動かすことで結果表が得られるようなシステムを作成したい。
90
+
91
+
92
+
91
-
93
+ 野菜と果物と飲み物の組み合わせを作成。購入個数の組み合わせも作成。それの掛け合わせたものの合計金額を出したい。
94
+
95
+
96
+
92
-
97
+ 1. 3つのカテゴリーの品物掛け合わせを作成。
98
+
93
-
99
+   A_data,B_data,C_data=[tomato,apple,milk],[tomato,apple,coffee]・・・・  全27通り
100
+
101
+ 2. 3つのカテゴリーの個数の組み合わせを作成(B,Cの個数候補はあり、全部たして15になるようにAを変動)
102
+
103
+ A,B,C=[11,1,3],[10,1,4]・・・・・・・全9通り
104
+
105
+ 3. 品物と個数を組み合わせを作成
106
+
107
+   [tomato:11個,apple:1個,milk:3個], [tomato:10個,apple:1個,milk:4個],・・・・・・・全243通り(27×9)
108
+
109
+ 4. それぞれの金額から、合計金額を算出して一覧表を作成したい。
110
+
111
+ [tomato:11個,apple:1個,milk:3個]=2800円, [tomato:10個,apple:1個,milk:4個]=2810円,・・・・・・・全243通り
112
+
113
+
114
+
115
+
116
+
117
+
118
+
119
+ 以下、作成したコードになります。
94
120
 
95
121
  #〈組み合わせたいデータ〉
96
122
 
@@ -130,25 +156,25 @@
130
156
 
131
157
  # 〈求めたいもの〉品物の組み合わせと購入個数の組み合わせと合計金額
132
158
 
133
- item_kumiawase_list=list()
159
+ item_kumiawase_list=list() 最終に得たい表の品物の組み合わせ部分
134
-
160
+
135
- quantity_kumiawase_list=list()
161
+ quantity_kumiawase_list=list() 最終に得たい表の個数の組み合わせ部分
136
-
162
+
137
- allcost_list=list()
163
+ allcost_list=list() 合計金額
138
-
139
-
140
-
164
+
165
+
166
+
141
- if X==10:
167
+ if X==10:                                     ※個数の組み合わせを実施
142
-
168
+
143
- quantity_list=list(itertools.product(B,C))
169
+   quantity_listlistitertools.productB,C)                BとCの組み合わせを実施
144
-
170
+
145
- df_quantity_list= pd.DataFrame(quantity_list,columns=['b', 'c'])
171
+ df_quantity_list= pd.DataFrame(quantity_list,columns=['b', 'c'])     BとCの組み合わせを表に変換
146
-
172
+
147
- Q=df_quantity_list.sum(axis=1)
173
+   Qdf_quantity_list.sumaxis1)                      15-(B+C)よりAの個数を追加
148
174
 
149
175
  df_quantity_list["total"]=Q
150
176
 
151
- P=50-Q
177
+ P=15-Q
152
178
 
153
179
  df_quantity_list["a"]=P
154
180
 
@@ -158,7 +184,7 @@
158
184
 
159
185
 
160
186
 
161
- item_list=list(itertools.product(A_data, B_data,C_data))
187
+ item_list=list(itertools.product(A_data, B_data,C_data)) ※品物の組み合わせを実施→表に変換
162
188
 
163
189
  df_item_list= pd.DataFrame(item_list)
164
190
 
@@ -166,7 +192,7 @@
166
192
 
167
193
 
168
194
 
169
- cost_list=list(itertools.product(A_2,B_2,C_2))
195
+ cost_list=list(itertools.product(A_2,B_2,C_2))             ※コストの組み合わせを実施→表に変換
170
196
 
171
197
  df_cost_list= pd.DataFrame(cost_list)
172
198
 
@@ -174,49 +200,47 @@
174
200
 
175
201
 
176
202
 
177
- df_quantity_list_number=len(df_quantity_list)
203
+ df_quantity_list_number=len(df_quantity_list)              ※個数の組み合わせ表を上から番号指定できるよう番号を入手
178
-
204
+
179
- df_quantity_list_number_bangou=np.arange(0,df_quantity_list_number,1)
205
+ df_quantity_list_number_bangou=np.arange(0,df_quantity_list_number,1)  
180
-
181
-
182
-
206
+
207
+
208
+
183
- df_cost_list_number=len(df_cost_list)
209
+ df_cost_list_number=len(df_cost_list)                  ※コストの組み合わせ表を上から番号指定できるよう番号を入手
184
210
 
185
211
  df_cost_list_number_bangou=np.arange(0,df_cost_list_number,1)
186
212
 
187
213
 
188
214
 
189
- for Df_cost_list_number_bangou in df_cost_list_number_bangou:
215
+ for Df_cost_list_number_bangou in df_cost_list_number_bangou:    
190
-
216
+
191
- cost_select=df_cost_list.iloc[Df_cost_list_number_bangou,:]
217
+ cost_select=df_cost_list.iloc[Df_cost_list_number_bangou,:]    ※コスト組み合わせ表のデータを上から順に指定。
192
-
218
+
193
- a_cost=cost_select[0]
219
+ a_cost=cost_select[0]                          Aのコスト
194
-
220
+
195
- b_cost=cost_select[1]
221
+ b_cost=cost_select[1]                          Bのコスト
196
-
222
+
197
- c_cost=cost_select[2]
223
+ c_cost=cost_select[2]                          Cのコスト
198
-
224
+
199
- item_select=df_item_list.iloc[Df_cost_list_number_bangou,:]
225
+      item_selectdf_item_list.ilocDf_cost_list_number_bangou,:] ※品物の組み合わせ表のデータを上から順に指定。
200
226
 
201
227
  for Df_quantity_list_number_bangou in df_quantity_list_number_bangou:
202
228
 
203
- item_kumiawase_list.append(item_select)
229
+ item_kumiawase_list.append(item_select)                   ※品物の組み合わせリストを記載
204
-
230
+
205
- quantity_select=df_quantity_list.iloc[Df_quantity_list_number_bangou,:]
231
+ quantity_select=df_quantity_list.iloc[Df_quantity_list_number_bangou,:]  ※個数組み合わせ表のデータを上から順に指定。
206
-
207
- quantity_select2=df_quantity_list.iloc[Df_quantity_list_number_bangou,:3]
232
+
208
-
209
- quantity_kumiawase_list.append(quantity_select2)
233
+ quantity_kumiawase_list.append(quantity_select2)              ※個数組み合わせリストを記載
210
-
234
+
211
- a_quantity=quantity_select[0]
235
+ a_quantity=quantity_select[0]                          Aの個数
212
-
236
+
213
- b_quantity=quantity_select[1]
237
+ b_quantity=quantity_select[1]                          Bの個数
214
-
238
+
215
- c_quantity=quantity_select[2]
239
+ c_quantity=quantity_select[2]                          Cの個数
216
-
240
+
217
- allcost= a_cost*a_quantity+b_cost*b_quantity+c_cost*c_quantity
241
+ allcost= a_cost*a_quantity+b_cost*b_quantity+c_cost*c_quantity      ※合計金額計算
218
-
242
+
219
- allcost_list.append(allcost)
243
+ allcost_list.append(allcost)                         ※合計金額をリストに記載
220
244
 
221
245
 
222
246