Фильтрация массива multi-D на основе массива того же размера - PullRequest
2 голосов
/ 20 марта 2019

У меня есть два массива сеточных данных «A» и «B» одинаковых размеров (1440, 400).Я хочу создать новый массив «C» того же измерения (1440, 400), где C содержит значения из точек сетки A, которые больше, чем B для той же точки сетки.Если A C = A[A>B] дает одномерный массив.В моем случае это дает массив формы (2362,).

Ответы [ 2 ]

2 голосов
/ 20 марта 2019

Вы можете использовать np.where для замены значений, где A > B равно False на np.nan:

In [1]: import numpy as np

In [2]: A = np.arange(9).reshape(3, 3)

In [3]: B = np.full((3, 3), 4)

In [4]: np.where(A > B, A, np.nan)
Out[4]:
array([[nan, nan, nan],
       [nan, nan,  5.],
       [ 6.,  7.,  8.]])
1 голос
/ 20 марта 2019

Я думаю np.where(A>B, A, np.nan) это то, что вы ищете.Это даст вам A, когда условие (A>B) истинно, и B, когда оно ложно.Вот пример:

import numpy as np
A = np.ones((1440, 400))
B = np.zeros((1440, 400))
B[0, 0] = 3
C = np.where(A>B, A, np.nan)

Это дает:

array([[nan, 1., 1., ..., 1., 1., 1.],
       [1., 1., 1., ..., 1., 1., 1.],
       [1., 1., 1., ..., 1., 1., 1.],
       ...,
       [1., 1., 1., ..., 1., 1., 1.],
       [1., 1., 1., ..., 1., 1., 1.],
       [1., 1., 1., ..., 1., 1., 1.]])

РЕДАКТИРОВАТЬ: я неправильно понял, каким должен быть конечный результат, поэтому я обновил это.

...