###行いたいこと
品物の組み合わせと、個数の組み合わせを実施し、それを掛け合わせた合計金額を表として得たいです。
コードは作成することができましたが、品物のカテゴリーを増やすと計算時間が膨大になってしまいます。
(本当は品物として10個のカテゴリーを利用したい)
素人なりになんとかコード作成することができました。高速化を可能にしたいとnumbaを用いてみましたがうまくいきません。
numba以外の方法での高速化でもかまいません。
ご教授頂きたくよろしくお願いいたします。
発生している問題・エラーメッセージ
<ipython-input-34-fd31c87fef52>:23: NumbaWarning: Compilation is falling back to object mode WITH looplifting enabled because Function "kumiawase_numba" failed type inference due to: Untyped global name 'item_kumiawase_list': Cannot type empty list File "<ipython-input-34-fd31c87fef52>", line 56: def kumiawase_numba(): <source elided> for Df_quantity_list_number_bangou in df_quantity_list_number_bangou: item_kumiawase_list.append(item_select) ^ @jit <ipython-input-34-fd31c87fef52>:23: NumbaWarning: Compilation is falling back to object mode WITHOUT looplifting enabled because Function "kumiawase_numba" failed type inference due to: cannot determine Numba type of <class 'numba.dispatcher.LiftedLoop'> File "<ipython-input-34-fd31c87fef52>", line 49: def kumiawase_numba(): <source elided> for Df_cost_list_number_bangou in df_cost_list_number_bangou: ^
該当のソースコード
〈行いたいこと〉 組み合わせたいデータはexcel表に記載し、pythonを動かすことで結果表が得られるようなシステムを作成したい。 野菜と果物と飲み物の組み合わせを作成。購入個数の組み合わせも作成。それの掛け合わせたものの合計金額を出したい。 1. 3つのカテゴリーの品物掛け合わせを作成。 A_data,B_data,C_data=[tomato,apple,milk],[tomato,apple,coffee]・・・・ 全27通り 2. 3つのカテゴリーの個数の組み合わせを作成(B,Cの個数候補はあり、全部たして15になるようにAを変動) A,B,C=[11,1,3],[10,1,4]・・・・・・・全9通り 3. 品物と個数を組み合わせを作成 [tomato:11個,apple:1個,milk:3個], [tomato:10個,apple:1個,milk:4個],・・・・・・・全243通り(27×9) 4. それぞれの金額から、合計金額を算出して一覧表を作成したい。 [tomato:11個,apple:1個,milk:3個]=2800円, [tomato:10個,apple:1個,milk:4個]=2810円,・・・・・・・全243通り 以下、作成したコードになります。 #〈組み合わせたいデータ〉 #品物 item A_data=['tomato','lettuce','carrot'] B_data=['apple','banana','orange'] C_data=['milk','coffee','beer'] #購入個数 quantity A=15-(B+C) B=[1,2,3] C=[3,4,7] #値段 cost A_2=[100,200,300] B_2=[10,30,50] C_2=[200,500,300] #Xは1~10の場合がある。今回は10の場合のみ記載 X=10 # 〈求めたいもの〉品物の組み合わせと購入個数の組み合わせと合計金額 item_kumiawase_list=list() 最終に得たい表の品物の組み合わせ部分 quantity_kumiawase_list=list() 最終に得たい表の個数の組み合わせ部分 allcost_list=list() 合計金額 if X==10: ※個数の組み合わせを実施 quantity_list=list(itertools.product(B,C)) BとCの組み合わせを実施 df_quantity_list= pd.DataFrame(quantity_list,columns=['b', 'c']) BとCの組み合わせを表に変換 Q=df_quantity_list.sum(axis=1) 15-(B+C)よりAの個数を追加 df_quantity_list["total"]=Q P=15-Q df_quantity_list["a"]=P #並び替え df_quantity_list=df_quantity_list.ix[:,['a',"b","c"]] item_list=list(itertools.product(A_data, B_data,C_data)) ※品物の組み合わせを実施→表に変換 df_item_list= pd.DataFrame(item_list) df_item_list.columns = ['A', 'B', 'C'] cost_list=list(itertools.product(A_2,B_2,C_2)) ※コストの組み合わせを実施→表に変換 df_cost_list= pd.DataFrame(cost_list) df_cost_list.columns = ['a2',"b2","c2"] df_quantity_list_number=len(df_quantity_list) ※個数の組み合わせ表を上から番号指定できるよう番号を入手 df_quantity_list_number_bangou=np.arange(0,df_quantity_list_number,1) df_cost_list_number=len(df_cost_list) ※コストの組み合わせ表を上から番号指定できるよう番号を入手 df_cost_list_number_bangou=np.arange(0,df_cost_list_number,1) for Df_cost_list_number_bangou in df_cost_list_number_bangou: cost_select=df_cost_list.iloc[Df_cost_list_number_bangou,:] ※コスト組み合わせ表のデータを上から順に指定。 a_cost=cost_select[0] Aのコスト b_cost=cost_select[1] Bのコスト c_cost=cost_select[2] Cのコスト item_select=df_item_list.iloc[Df_cost_list_number_bangou,:] ※品物の組み合わせ表のデータを上から順に指定。 for Df_quantity_list_number_bangou in df_quantity_list_number_bangou: item_kumiawase_list.append(item_select) ※品物の組み合わせリストを記載 quantity_select=df_quantity_list.iloc[Df_quantity_list_number_bangou,:] ※個数組み合わせ表のデータを上から順に指定。 quantity_kumiawase_list.append(quantity_select2) ※個数組み合わせリストを記載 a_quantity=quantity_select[0] Aの個数 b_quantity=quantity_select[1] Bの個数 c_quantity=quantity_select[2] Cの個数 allcost= a_cost*a_quantity+b_cost*b_quantity+c_cost*c_quantity ※合計金額計算 allcost_list.append(allcost) ※合計金額をリストに記載 df_item_kumiawase= pd.DataFrame(item_kumiawase_list) df_quantity_kumiawase= pd.DataFrame(quantity_kumiawase_list) df_allcost_list=pd.DataFrame(allcost_list)
回答1件
あなたの回答
tips
プレビュー