Как мне выбрать определенную часть массива NumPy, а затем следующую часть?

#python #numpy

#python #numpy

Вопрос:

Я хочу ежегодно вычислять максимальную температуру, используя Numpy в Python. Я должен вычислять максимальную температуру с каждого года. Я могу рассчитать максимальную температуру для всех включенных данных, используя np.max(array) .

Но как мне рассчитать его за год?

Комментарии:

1. Можете ли вы показать образец своих данных, чтобы люди могли получить представление о столбцах и строках и их содержимом?

2. я новичок, поэтому у меня недостаточно репутации, чтобы дать ссылку на изображение. Но я отредактировал, чтобы показать формат базы данных ниже 🙂 спасибо

3. Не делайте этого в numpy , используйте pandas . У него даже есть from_excel метод ввода (он не очень хорош, но тогда он более функционален numpy )

Ответ №1:

Я бы предложил сделать это в pandas (предположим, что ваш массив назван x ):

 df = pd.DataFrame(x, columns=['year', 'month', 'max_temp'])

max_temps_per_year = df.groupby('year')['max_temp'].max()

print(max_temps_per_year)
 

Если вам нужна чистая реализация numpy и предполагается, что ваш массив имеет имя x , вы могли бы:

  1. сначала используйте логическое условие, чтобы выбрать только допустимые строки вашего массива:
 cond = x[:, 0] == 1990  # cond is True/False based on if the year is 1990
sub = x[cond]  # subset of x that has only the rows satisfying the condition
 
  1. затем вычислите максимальную температуру для подмножества
 max_temp = sub[:, 2].max()  # maximum temperature of year
 

Если вы выполняете эти шаги итеративно, вы должны получить максимальную температуру для каждого года:

 years = np.unique(x[:, 0])  # find unique years
max_temps = [(x[:, 0] == year)[:, 2].max() for year in years]  # same as above written as list comp

# print the results:
print('Year | Max temperature')
for year, temp in zip(years, max_temps):
    print('{:^4} | {:^15}'.format(year, temp))
 

Ответ №2:

Это должно сработать..

 #col index of the year field
y=0
#col index of the temperature field
t=2
#Taking unique Years
n=np.unique(arr[:,y])
#Taking max temp for each Year
x=[np.max(arr[arr[:,y]==i,t].astype(np.float)) for i in n]
maxarr=np.append(n,x).reshape(len(n),len(x))
print(maxarr)
 

Вывод

 [['1990' '1991']
 ['25.0' '21.0']]