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

Retrieve indexes of min and max values in np.ndarray

我正在处理一些 tif 文件,我必须根据 .tif 文件绘制温度和植被指数之间的依赖关系。仅供参考。现在我的编程问题。 我正在使用 python 2.7 (x64)。 我有一个很大的 ndarray 形式的 NumPy lib,包含温度值和第二个(相同大小)和植被索引。 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。上行return 2个索引。那么:

newMinVi = ndvi1[ax][ay]

应分配给 newMinViminVi 相同的值。但事实并非如此。我检查了 ax-1, ax+1, ay-1,ay+1 之类的附近索引,它们甚至都不接近我的 minVi 值。你有什么想法来协调我的 minVi 值吗?

ndvi1[mergedmask==False].argmin() 会给你 ndvi1[mergedmask==False] 中最小值的索引,即新数组的索引,对应于 mergedmaskFalse 的地方.

这里的问题是 ndvi1[mergedmask==False] 并不是真正的 掩码 。它选择满足条件的 ndvi1 的那些值,并将这些值组装到一个新的一维数组中。例如,检查 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)

希望对您有所帮助!

几乎是我想要的。

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)

感谢您的帮助:)