前提・実現したいこと
初心者です。もともとNumpyを使わずに動いていたプログラムをNumpyを使って動かしたいです。
Numpy移行前は、二重のforループを使って、501個のデータが時間変化とともにどう変わっていくか、その変化を見るプログラムを作りました。
各時間ごとにデータを格納していきたいです。
501個のデータを配列として作り、forループを一つ減らそうとしたのですが、配列の参照が上手くいきません。
発生している問題・エラーメッセージ
only integer scalar arrays can be converted to a scalar index
該当のソースコード
Python3.7
1Bet_A = 10 2Bet_B = 0.05 3dttime = 1000 4arr = np.zeros(501) 5arr[0] = 1 6arr = np.array([arr]) 7arr = arr.T 8def calcal(l1 , t1 , dtype = 'int'): 9 return -(1/Bet_A) * arr[l1 , t1] 10 - (1/Bet_B) * arr[l1 , t1] 11 + (1/Bet_B) * np.sum(car[0 : l1 , t1]) + car[l1 , t1] 12 13list_countup = np.arange(0 , 501 , 1 , dtype = 'int') 14 15for time1 in tqdm(range(dttime)): 16 ghost = np.array(calcal(list_countup , time1)) 17 ghost = np.array([ghost]) 18 ghost = ghost.T 19 arr = np.concatenate([arr , ghost] , 1) 20 21 22 23# 2019-06-11 追記 Numpy配列を使わないときの関数部分の処理 24def calcal(l1 , t1 , dtype = 'int'): 25 return -(1/Bet_A) * arr[l1][t1] 26 - (1/Bet_B) * arr[l1][t1] 27 + (1/Bet_B) * sum(car[0:l1][t1]) + car[l1][t1] 28 29def loop(): 30 for t1 in tqdm(range(dttime)): 31 ghost = [calcal(l1 , t1) for l1 in range(501)] 32 arr.append(ghost) 33 34loop() 35
試したこと
問題がある部分はnp.sum(car[0 : l1 , t1]))の部分だと思います。
試しに0 : l1の部分を 10とかの整数にしたら動きました。
list_countupを引数に使って範囲指定しています。この方法が良くないのだとは思うのですが、調べてみてもどうすればいいのかわかりません。
どうにもならないので二重forループで書き直してみたら、numpyを導入する前よりも遅くなってしまいました。
ご教授お願いいたします。
2019-06-11 追記
Bet_A, Bet_B, dttimeについて追記させていただきました。定数です。
動かないソースだけ貼っても「なにをしたかったのか」は伝わりません。だって「動かない」ソースですから。 遅くても動くソースの方があった方がずっと助けになりますよ。
おっしゃるとおりです。コードの最後に、一部追加します。
forループを使わないでnp.sum(numpy_list[ 0 : x , y])を計算したいです。xとyはそれぞれNumpy配列で0から任意の整数まで、+1ずつの配列になっています。
このままでは動かないので、代わりとなるような処理方法はないでしょうか。
補足情報(FW/ツールのバージョンなど)
実行環境 Python3.7
IDE Spyder
回答1件
あなたの回答
tips
プレビュー