2015-06-01 3 views
0

Я работаю над некоторыми файлами tif, и мне приходится строить зависимости между температурой и индексом vegatation на основе .tif-файла. Это был только FYI. Теперь моя проблема программирования. Я использую python 2.7 (x64). У меня большая форма ndarray NumPy lib, содержит значения temerature и второго (того же размера) с растительностью 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]) 

В верхних переменном я имею минимальные и максимальные значения TS (температур) и VI (индекс растительности). Все в порядке. Я счастлив. Теперь я должен найти координаты в toa и ndvi1 массивах. Поэтому я использую это:

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], т.е. индекс в новый массив, соответствующие местам, где mergedmask является False.

Проблема в том, что 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) 

Надеется, что это помогает!

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) 

Спасибо за помощь :)

Смежные вопросы