質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

2299閲覧

Pythonで降雨予測をしているのですがエラーが起きます

fut

総合スコア12

NumPy

NumPyはPythonのプログラミング言語の科学的と数学的なコンピューティングに関する拡張モジュールです。

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Ubuntu

Ubuntuは、Debian GNU/Linuxを基盤としたフリーのオペレーティングシステムです。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2016/08/30 07:16

編集2016/08/30 07:53

###前提・実現したいこと
ここに質問したいことを詳細に書いてください
(例)PHP(CakePHP)で●●なシステムを作っています。
■■な機能を実装中に以下のエラーメッセージが発生しました。
プログラム初心者です。
Python2.7で高解像度降水ナウキャストの画像を取得し洪水を予測するプログラムを作っています。
###発生している問題・エラーメッセージ
晴れのとき(画像に降水データが無いとき)は正常に動作するのですが、雨が降っているとき(画像に降水データがあるとき)たまにエラーを起こすときがあります。

エラーメッセージ

Traceback (most recent call last):
File "/home/tklabubuntu01/toran/analysis/labeling.py", line 323, in <module>
if d[i-1][j+1] >= r + 1: #rightup
IndexError: index out of bounds
###該当のソースコード

Python

1 datas = datas.replace('#ffffff', '0') 2 datas = datas.replace('#f2f2ff', '1') 3 datas = datas.replace('#a0d2ff', '2') 4 datas = datas.replace('#218cff', '3') 5 datas = datas.replace('#041ff', '4') 6 datas = datas.replace('#faf50', '5') 7 datas = datas.replace('#ff990', '6') 8 datas = datas.replace('#ff280', '7') 9 datas = datas.replace('#b4068', '8') 10 11 f.write(str(datas)) 12 13f.close() 14 15d = np.genfromtxt(path + "/data/" + directry + "/r" + yyyymmddhh3 + "_" + yyyymmddhh4 + ".csv", delimiter = "," ) 16f1 = open(path + "/data/" + directry + "/r" + yyyymmddhh3 + "_" + yyyymmddhh4 + "_lbl.csv", "w") #labering 17 18x = 512#len(d) # Tate 512まで 19y = 512#len(d[0]) # yoko 512まで 20n1 = [[0 for j in range(512)] for i in range(512)] # labeling 21n2 = [[0 for j in range(3)] for i in range(150)] #lookuptable 22n3 = [[0 for j in range(350)] for i in range(150)] #distanceX 縦 23n4 = [[0 for j in range(350)] for i in range(150)] #distanceY 横 24n5 = [0 for j in range(150)] #GloupCount 25 26i = 0 #縦 27j = 0 #横 28b1 = 0 #左 29b2 = 150 #左上 30b3 = 150 #上 31b4 = 150 #右上 32k1 = 0 33k2 = 0 34k3 = 0 35k4 = 0 36k5 = 0 37k6 = 0 38Min = 0 39count = 0 #label number 40r = 6 #雨量閾値 41 42while k1 <= 149: 43 n2[k1][0] = k1 + 1 44 n2[k1][1] = k1 + 1 45 k1 = k1 + 1 46 47while i < x: 48 while j < y: 49 50 if d[i][j] >= 6: 51 try: 52 if d[i][j-1] >= r: #left 53 b1 = d[i][j-1] 54 except: 55 if d[i][j-1] >= r + 1: #left 56 b1 = d[i][j-1] 57 try: 58 if d[i-1][j-1] >= r: #leftup 59 b2 = d[i-1][j-1] 60 except: 61 if d[i-1][j-1] >= r + 1: #leftup 62 b2 = d[i-1][j-1] 63 try: 64 if d[i-1][j] >= r: #up 65 b3 = d[i-1][j] 66 except: 67 if d[i-1][j] >= r + 1: #up 68 b3 = d[i-1][j] 69 try: 70 if d[i-1][j+1] >= r: #rightup 71 b4 = d[i-1][j+1] 72 except: 73 if d[i-1][j+1] >= r + 1: #rightup 74 b4 = d[i-1][j+1] 75 76 Min = b1 77 78 if Min > b2: 79 Min = b2 80 81 if Min > b3: 82 Min = b3 83 84 if Min > b4: 85 Min = b4 86 87 d[i][j] = Min 88 89 if b1 <= 149: 90 if b1 > Min: 91 k1 = 0 92 while k1 <= 149: 93 if n2[k1][0] == b1: 94 n2[k1][1] = Min 95 k1 = k1 + 1 96 97 if b2 <= 149: 98 if b2 > Min: 99 K1 = 0 100 while k1 <= 149: 101 if n2[k1][0] == b2: 102 n2[k1][1] = Min 103 k1 = k1 + 1 104 105 if b3 <= 149: 106 if b3 > Min: 107 K1 = 0 108 while k1 <= 149: 109 if n2[k1][0] == b3: 110 n2[k1][1] = Min 111 k1 = k1 + 1 112 113 if b4 <= 149: 114 if b4 > Min: 115 K1 = 0 116 while k1 <= 149: 117 if n2[k1][0] == b4: 118 n2[k1][1] = Min 119 k1 = k1 + 1 120 121 b1 = 150 122 b2 = 150 123 b3 = 150 124 b4 = 150 125 k1 = 0 126 k2 = 0 127 k3 = 0 128 k4 = 0 129 k5 = 0 130 k6 = 0 131 if d[i][j-1] < r and d[i-1][j-1] < r and d[i-1][j] < r and d[i-1][j+1] < r: 132 count = count + 1 133 d[i][j] = count 134 135 if d[i][j] < r: 136 d[i][j] = 0 137 j = j + 1 138 139 j = 0 140 i = i + 1 141 142#-----lookuptable------ 143 144k2 = 149 145while k2 >= 0: 146 k3 = k2 147 while k3 >= 0: 148 if n2[k3][0] == n2[k2][1]: 149 n2[k2][1] = n2[k3][1] 150 k3 = k3 - 1 151 k2 = k2 - 1 152 153k2 = 0 154while k2 <= 149: 155 if k2 == 0: 156 c = 1 157 n2[k2][2] = c 158 elif n2[k2][1] == n2[k2 - 1][1]: 159 n2[k2][2] = c 160 else: 161 c += 1 162 n2[k2][2] = c 163 k2 = k2 + 1 164 165k1 = 0 166k2 = 0 167while k2 <= 149: 168 k3 = k2 169 while k3 <= 149: 170 if n2[k2][1] == n2[k3][1]: 171 n2[k3][2] = n2[k2][2] 172 k3 = k3 + 1 173 k2 = k2 + 1 174 175i = 0 176j = 0 177while i <= 511: 178 j = 0 179 while j <= 511: 180 k1 = 0 181 while k1 <= 149: 182 if d[i][j] == n2[k1][0]: 183 d[i][j] = n2[k1][2] 184 k1 = k1 + 1 185 n1[i][j] = d[i][j] 186 f1.write(str(n1[i][j])+",") 187 j = j + 1 188 f1.write("\n") 189 i = i + 1 190 191#-----distance------ 192 193k1 = 0 194k2 = 0 195while k1 <= 149: 196 k2 = 0 197 while k2 <= 349: 198 n3[k1][k2] = 0 199 n4[k1][k2] = 0 200 k2 = k2 + 1 201 n5[k1] = 0 202 k1 = k1 + 1 203 204a = 0 #n1[][] 205b = 0 #n5[n1[][]] 206k1 = 0 207k2 = 0 208while k1 <=511: 209 k2 = 0 210 while k2 <=511: 211 if n1[k1][k2] > 0: 212 a = n1[k1][k2] 213 n5[int(a)] = n5[int(a)] + 1 214 b = n5[int(a)] + 1 215 n3[int(a)][int(b)] = k1 + 1 216 n4[int(a)][int(b)] = k2 + 1 217 k2 = k2 + 1 218 k1 = k1 + 1 219 220x1 = 140 #FUT 221y1 = 278 #FUT 222x2 = 0 223y2 = 0 224s1 = 0 #|x1-x2| 225s2 = 0 #|y1-y2| 226w1 = 0 227r1 = 0 228 229k1 = 0 230k2 = 0 231while k1 <= 149: 232 k2 = 0 233 while k2 <= 349: 234 if n3[k1][k2] > 0: 235 x2 = n3[k1][k2] 236 y2 = n4[k1][k2] 237 if x1 > x2: 238 s1 = x1 - x2 239 else: 240 s1 = x2 - x1 241 if y1 > y2: 242 s2 = y1 - y2 243 else: 244 s2 = y2 - y1 245 246 w1 = s1 * s1 + s2 * s2 247 r1 = math.sqrt(w1) #三平方の定理 248 if n3[k1][0] == 0: 249 n3[k1][0] = r1 250 if n3[k1][0] > r1: 251 n3[k1][0] = r1 252 k2 = k2 + 1 253 k1 = k1 + 1 254 255k1 = 0 256while k1 <= 149: 257 n3[k1][1] = k1 258 k1 = k1 + 1 259n3[0][1] = "gloup No." 260 261i = 0 262k1 = 1 263while k1 <= 149: 264 if n3[k1][0] > 0 and n3[k1][0] < 20: 265 i = 1 266 k1 = k1 + 1 267 268if i == 1: 269 print("DANGER!!") 270else: 271 print("SAFE") 272f1.close() 273

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
自分で全部かいたわけではないのでプログラムを完全には理解できていません。
追記
datesのところは画像の色をそれぞれ数字に変換しています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

argius

2016/08/30 07:25

肝心のd[i-1][j+1]の部分が掲載されていないように見えます。それに全体的に必要な情報が足りないように思います。 コードをすべて掲載する必要はありませんが、もう少し足していただけませんか。 特に、変数datasを作っているところと、エラーの箇所です。
fut

2016/08/30 07:50

すみません。間違ったプログラムを載せていました。
argius

2016/08/30 08:03

修正ありがとうございました。
guest

回答1

0

ベストアンサー

この箇所ですね。

lang

1try: 2 if d[i-1][j+1] >= r: #rightup 3 b4 = d[i-1][j+1] 4except: 5 if d[i-1][j+1] >= r + 1: #rightup 6 b4 = d[i-1][j+1]

配列の2次元目の範囲は0~511までなのに、j+1とすることで、範囲外の[?][512]にアクセスしようとしています。
IndexError: index out of boundsというのは、「インデックスの範囲外」という意味で、配列の範囲外の要素にアクセスしようとした場合に発生します。

それに、このコードの状況では、例外が投げられるのはおそらくIndexError: index out of boundsの場合だけなのに、except:でまた同じエラーを起こす[?][512]にアクセスしようとしていますね。
この例外処理を改善する必要があるでしょう。

あと、質問自体とは関係ありませんが、この箇所だけでd[i-1][j+1]という式が4回も使われています。
例外の部分は取り除くとしても、この手のコピペはバグの元ですので、d[i-1][j+1]はいったん変数に格納したほうが良いと思います。

投稿2016/08/30 08:06

argius

総合スコア9388

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

fut

2016/08/30 09:01

修正して動かしてみました。 今のところエラーは無いです。 何かあったらまた報告します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問