エラー(その2)
二日前のエラーの話。
同じコードをノートPCで実行したところ、”仮想メモリが不足してます...”と表示されて固まってしまった。そこでコードをよく見なおした。
ダメだったコードは下のもの。繰り返し処理をしている部分で落ちてしまう。for分の中でfig=figure()を繰り返しているのが気になってはいたのだが、for分の外側でこれを定義すると、描画される絵が重なって表示されるのでこうしていた。
colors = ['#FFFFFF', '#FFFF33', '#FFCC99', '#CC0033'] dnum = Util.dam_dam[0] for k in range(1,dnum): fig = figure() ay = fig.add_subplot(111) for i in range(Util.sens_num_ini+8): if i >= Util.sens_num_ini: color = colors[0] else: color = colors[int(Util.dam_dam[k][i][0])] x = Util.cordx[i] y = Util.cordy[i] ay.fill(x, y, color) ay.axis('off') ay.text(5,100,"Front", fontsize=20) ay.text(53,100,"Back", fontsize=20) ay.text(5,-5,"Time=%s [sec]" % str(Util.dam_time[k-1]), fontsize=14) filename = 'anim' + str(k) fig.savefig(filename)
メモリにどれだけの付加がかかるのかはわからないが、これは避けるべきと考えてfor分の外側に出した。また、examplesのコードにcla()というものがあったのを思い出し、たぶんこれが画面をクリアするものと推測。そこで以下のように修正。
colors = ['#FFFFFF', '#FFFF33', '#FFCC99', '#CC0033'] dnum = Util.dam_dam[0] fig = figure() ax = fig.add_subplot(111) for k in range(1, dnum): cla() for i in range(Util.sens_num_ini+8): if i >= Util.sens_num_ini: color = colors[0] else: color = colors[int(Util.dam_dam[k][i][0])] x = Util.cordx[i] y = Util.cordy[i] ax.fill(x, y, color) ax.axis('off') ax.text(5,100,"Front", fontsize=20) ax.text(53,100,"Back", fontsize=20) ax.text(5,-5,"Time=%s [sec]" % str(Util.dam_time[k-1]), fontsize=14) filename = 'anim' + str(k) fig.savefig(filename)
動きました!実行速度も向上した(気がする)。今考えるとかなり基本的なことだったような。
お騒がせしました。