检索np.ndarray中的最小值和最大值的索引

时间:2015-06-01 23:33:01

标签: python numpy gis

我正在处理一些tif文件,我必须根据.tif文件绘制温度和vegatation索引之间的依赖关系。这只是FYI。现在我的编程问题。 我使用的是python 2.7(x64)。 我有大的ndarray形式NumPy lib,包含temerature和第二(相同大小)植被idex的值。 mergedmask是我的掩码(与其他数组大小相同),其中False值表示它是有效数据。

 maxTS = np.amax(toa[mergedmask==False])
 minTS = np.amin(toa[mergedmask==False])
 maxVI = np.amax(ndvi1[mergedmask==False])
 minVi = np.amin(ndvi1[mergedmask==False])

在上部变量中,我的最小值和最大值为TS(温度)和VI(植被指数)。一切都好。我很开心。现在我必须找到toandvi1数组中的坐标。所以我正在使用它:

ax,ay = np.unravel_index(ndvi1[mergedmask==False].argmin(),ndvi1.shape)

为了简化我的消息,我只关注minVI。上线返回2个索引。然后:

newMinVi = ndvi1[ax][ay]

应分配给newMinViminVi相同的值。但它并没有。我检查了ax-1, ax+1, ay-1,ay+1附近的索引,所有这些索引都不接近我的minVi值。你有什么想法来获得我的minVi值的协调。

2 个答案:

答案 0 :(得分:0)

ndvi1[mergedmask==False].argmin()将为您提供ndvi1[mergedmask==False]中最小值的索引,即新数组的索引,对应于mergedmaskFalse的位置。< / p>

这里的问题是ndvi1[mergedmask==False]实际上不是掩码。它选择符合条件的ndvi1值,并将这些值组合成新的1D数组。例如,检查ndvi1[mergedmask==False].size是什么,并将其与ndvi1.size进行比较。

您可能想要做的是创建一个真正的蒙版数组:

ndvi1_masked = np.ma.masked_array(ndvi1, (mergedmask==False))
ax, ay = np.unravel_index(ndvi1_masked.argmin(), ndvi1.shape)

希望这有帮助!

答案 1 :(得分:0)

几乎我想要的东西。

ndvi1_masked = np.ma.masked_array(ndvi1, (mergedmask==False))

很好地掩盖但不是这个我想要的价值观。我只需要将语句改为mergedmask==False,最后我得到了:

myNdviMasked = np.ma.masked_array(ndvi1,(mergedmask!=False))
bx, by = np.unravel_index(myNdviMasked.argmin(), myNdviMasked.shape)

感谢您的帮助:)