2015-06-01 211 views
0

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

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

在上部将变量i具有TS(温度)和VI(植被指数)的最小值和最大值。一切都好。我很开心。现在我必须在toandvi1阵列中找到坐标。所以我使用这个:

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

为了简化我的味精,我只专注于minVI。上行返回2个索引。然后:

newMinVi = ndvi1[ax][ay] 

应分配给newMinVi相同的值minVi。但事实并非如此。我查看了像ax-1, ax+1, ay-1,ay+1这样的索引,并且它们都不甚接近我的minVi值。你有任何想法来获得我的minVi价值的协调。

回答

0

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) 

希望这有助于!

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) 

感谢您的帮助:)