Как найти массив с минимальными значениями нескольких массивов одинаковой длины - PullRequest
0 голосов

У меня есть многомерный массив с координатной сеткой с размерами (29,320,180), где 29 - номер массива, 320 - латидутальное значение, а 180 - продольное значение. Я хочу найти минимальное значение в каждой точке сетки из всех 29 массивов, поэтому, наконец, я могу получить массив размером 320x180, состоящий из минимального значения в каждой точке сетки. Я должен подорвать тот факт, что каждый массив имеет большое количество значений nan. Как я могу этого добиться? Например, два массива с одинаковыми размерами: a = [[1,2,3], [3,5,8], [4,8,12]] b = [[3,5,6], [9,12 , 5], [5,6,14]] и желаемый результат будет массивом с минимальным значением в каждом индексе, что означает: c = [[1,2,3], [3,5,5], [ 4,6,12]]

1 Ответ

0 голосов
/ 07 мая 2020

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

Давайте создадим пример нескольких небольших 2D-массивов :

import numpy as np
ex_dict = {}
lat_min = []
lon_min = []
# creating fake data assuming instead of the 29 arrays of dimensions 320x180 you have 5 arrays of dimensions 2x5 (so we can see the output) and all the arrays are stored in a dictionnary (because it's easier for me to randomly create them that way :)
for i in range(0,5):
    ex_dict[i] = np.stack([np.random.choice(range(i,20), 5, replace=False) for _ in range(2)])

Давайте посмотрим на наши массивы:

ex_dict
{0: array([[19, 18,  5, 13,  6],
        [ 5, 12,  3,  8,  0]]),
 1: array([[10, 13,  2, 19, 15],
        [ 5, 19,  6,  8, 14]]),
 2: array([[ 5, 17, 10, 11,  7],
        [19,  2, 11,  5,  6]]),
 3: array([[14,  3, 17,  4, 11],
        [18, 10,  8,  3,  7]]),
 4: array([[15,  8, 18, 14, 10],
        [ 5, 19, 12, 16, 13]])}

Затем давайте создадим список для хранения минимальных значений для каждого массива (lat_min содержит минимум для каждого raw и lat_lon для каждого столбец по всем массивам):

# for each of the 5 arrays (in this example, stored in the ex_dict dictionnary), find the minimum in each row (axis = 1) and each column (axis = 2)
for i in ex_dict:
    lat_min.append(np.nanmin(ex_dict[i], axis=1))
    lon_min.append(np.nanmin(ex_dict[i], axis=0)) 

Наши списки с минимальными значениями:

lat_min
[array([5, 0]), array([2, 5]), array([5, 2]), array([3, 3]), array([8, 5])]

lon_min
[array([ 5, 12,  3,  8,  0]),
 array([ 5, 13,  2,  8, 14]),
 array([ 5,  2, 10,  5,  6]),
 array([14,  3,  8,  3,  7]),
 array([ 5,  8, 12, 14, 10])]
...