orient = np.random.randint(0, 360, 100000) speed = np.random.randint(0, 900, 100000) x_edges = np.arange(0, 901, 100) y_edges = np.linspace(0, 360, 17) H = np.histogram2d(np.mod(orient + 11.25, 360), speed, bins=(y_edges, x_edges))[0].astype(int) print(H.shape) # (16, 9) sns.set() # 目盛りのラベルを設定する。 xlabels = ['{} ~ {}'.format(start, end) for start, end in zip(x_edges, x_edges[1:])] ylabels = ['N', 'NNW', 'NW', 'WNW', 'W', 'WSW', 'SW', 'SSW', 'S', 'SSE', 'SE', 'ESE', 'E', 'ENE', 'NE', 'NNE'] # ヒートマップを作成する。 sns.heatmap(H, annot=True, cmap='Reds', fmt='d', xticklabels=xlabels, yticklabels=ylabels, cbar=False) plt.show()
前提・実現したいこと
上図のような16×9の配列Hを利用して、1マスずつ以下のような計算を行い、計算結果を同じように16×9の配列に収納したいと考えております。
下のプログラムを実行したところvel.append(ve[m,n])の行にinvalid index to scalar variable.のエラーが帰ってきました。これは1次元配列に2次元配列を代入しようとしたためと考えましたが、この捉え方であっているのでしょうか。その場合二次元の空配列のリストを作る方法などはあるのでしょうか。
もしくは、リストを作成する以外にいい方法があれば教えていただきたいです。(その後のプログラムで計算結果を行ごとにグラフにしたいため、配列のように列や行で扱いやすいものが良いです。)
発生している問題・エラーメッセージ
#流向の割合を求める dir = list() dir = [] for i in range(16): di=sum(H[i,:])/len(orient)*100 dir.append(di) #print(dir) #流速の割合を求める vel = list() vel =[] for m in range (16): for n in range (9): ve=H[n,m]/sum(H[m,:])*dir[m] vel.append(ve[m,n]) #print(vel)
回答3件
あなたの回答
tips
プレビュー