it-roy-ru.com

Python: найти позицию элемента в массиве

У меня есть CSV, содержащий данные о погоде, такие как максимальная и минимальная температура, осадки, долгота и широта метеостанций и т.д. Каждая категория данных хранится в одном столбце. 

Я хочу найти расположение максимальной и минимальной температуры. Найти максимум или минимум очень просто: Numpy.min (my_temperas_column)

Как я могу найти положение, где расположен минимум или максимум, чтобы я мог найти широту и долготу?

Вот моя попытка: 

def coldest_location(data):

coldest_temp= numpy.min(mean_temp)

    for i in mean_temp:
         if mean_temp[i] == -24.6:
            print i

Ошибка: индексы списка должны быть int

Я сохранил каждый из столбцов моего CSV в переменные, чтобы они были отдельными списками.

lat          = [row[0] for row in weather_data]  # latitude
long         = [row[1] for row in weather_data]  # longitude
mean_temp    = [row[2] for row in weather_data]  # mean temperature 

Я решил проблему в соответствии с предложением list.index (x)

mean_temp.index(coldest_temp) 

coldest_location=[long[5],lat[5]] 

Не уверен, что правильно задать второй вопрос в вопросе, но что, если есть два места с одинаковой минимальной температурой? Как я могу найти оба и их показатели? 

20
julesjanker

Задумывались ли вы об использовании метода .index(value) списка Python? Он возвращает индекс в списке, где находится первый экземпляр переданной переменной value.

45
Aaron

Без фактического просмотра ваших данных трудно сказать, как найти местоположение max и min в вашем конкретном случае, но в целом вы можете искать местоположения следующим образом. Это простой пример ниже:

In [9]: a=np.array([5,1,2,3,10,4])

In [10]: np.where(a == a.min())
Out[10]: (array([1]),)

In [11]: np.where(a == a.max())
Out[11]: (array([4]),)

Кроме того, вы также можете сделать следующее:

In [19]: a=np.array([5,1,2,3,10,4])

In [20]: a.argmin()
Out[20]: 1

In [21]: a.argmax()
Out[21]: 4
13
Marcin

Как утверждает Аарон, вы можете использовать .index(value), но, поскольку это вызовет исключение, если value отсутствует, вы должны обработать этот случай, даже если вы уверены, что этого никогда не произойдет. Пара вариантов - сначала проверить его наличие, например:

if value in my_list:
    value_index = my_list.index(value)

или перехватывая исключение, как в:

try:
    value_index = my_list.index(value)
except:
    value_index = -1

Вы никогда не ошибетесь при правильной обработке ошибок.

5
Gary02127

Ты должен сделать:

try:
    value_index = my_list.index(value)
except:
    value_index = -1;
3
sudhakar

Для этого есть встроенный метод:

numpy.where()

Вы можете узнать больше об этом в отличная подробная документация .

2
lkolololol

Я бы предположил, что ваша переменная mean_temp уже имеет загруженные в нее значения и имеет размерность nX1 (т.е. только одна строка). Теперь, чтобы достичь того, что вы хотите, вы можете:

Измените тип данных вашей переменной:

def coldest_location(data):

    mean_temp = numpy.mat(mean_temp) #data is now matrix type
    min_index = numpy.nonzero(mean_temp == mean_temp.min())  # this returns list of indexes
    print mean_temp[min_index[0],min_index[1]] # printing minimum value, i.e -24.6 in you data i believe
0
Nishant Dixit