检索 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
(植被指数)的最小值和最大值。一切都好。我很开心。现在我必须在 toa
和 ndvi1
数组中找到坐标。所以我正在使用这个:
ax,ay = np.unravel_index(ndvi1[mergedmask==False].argmin(),ndvi1.shape)
为了简化我的消息,我只关注 minVI
。上行return 2个索引。那么:
newMinVi = ndvi1[ax][ay]
应分配给 newMinVi
与 minVi
相同的值。但事实并非如此。我检查了 ax-1, ax+1, ay-1,ay+1
之类的附近索引,它们甚至都不接近我的 minVi
值。你有什么想法来协调我的 minVi 值吗?
ndvi1[mergedmask==False].argmin()
会给你 ndvi1[mergedmask==False]
中最小值的索引,即新数组的索引,对应于 mergedmask
是 False
的地方.
这里的问题是 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)
感谢您的帮助:)
我正在处理一些 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
(植被指数)的最小值和最大值。一切都好。我很开心。现在我必须在 toa
和 ndvi1
数组中找到坐标。所以我正在使用这个:
ax,ay = np.unravel_index(ndvi1[mergedmask==False].argmin(),ndvi1.shape)
为了简化我的消息,我只关注 minVI
。上行return 2个索引。那么:
newMinVi = ndvi1[ax][ay]
应分配给 newMinVi
与 minVi
相同的值。但事实并非如此。我检查了 ax-1, ax+1, ay-1,ay+1
之类的附近索引,它们甚至都不接近我的 minVi
值。你有什么想法来协调我的 minVi 值吗?
ndvi1[mergedmask==False].argmin()
会给你 ndvi1[mergedmask==False]
中最小值的索引,即新数组的索引,对应于 mergedmask
是 False
的地方.
这里的问题是 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)
感谢您的帮助:)