2

0 から 255 までの値を含む 2 つの配列を使用して計算を行いたいと考えています。ゼロで除算できないため、次のコードを使用してこの問題を回避しました。

#creation of the two arrays by reading pixel values of an image
data2 = band2.ReadAsArray(0,0,cols,rows)
data3 = band3.ReadAsArray(0,0,cols,rows)

#create array to mark all zero values
mask = numpy.greater((data2+data3), 0)

#do calculation with all values >0 or else assign them -99
ndvi = numpy.choose(mask,(-99, (data3-data2)/(data2 + data3)))

ただし、まだエラーが表示されます: RuntimeWarning: ゼロによる除算が除算で発生しました。私の間違いはどこですか? それでもゼロで割りたくないはずですよね?

最後の行をこれに変更すると機能しますが、データが正確ではなくなりました。

ndvi = numpy.choose(mask,(-99, (data3-data2)/(data2 + data3 + 1)))
4

2 に答える 2

1

ゼロ除算の条件は(data2+data3)==0であるため、次のように動作するはずです。

mask = numpy.not_equal((data2+data3), 0)
ndvi = numpy.choose(mask,(-99, (data3-data2)/(data2 + data3)))

これを行う別の方法は次のとおりです。

mask = (data2+data3)==0
ndvi = np.zeros(data2.shape)
ndvi[  mask ] = -99
ndvi[ ~mask ] = ((data3-data2)/(data2+data3))[ ~mask ]
于 2013-07-07T17:59:08.307 に答える