#python #arrays #python-xarray
#python #массивы #python-xarray
Вопрос:
У меня есть два массива данных с привязкой к сетке ‘A’ и ‘B’ одинаковых размеров (1440, 400). Я хочу создать новый массив ‘C’ того же размера (1440, 400), где C содержит значения из точек сетки A, которые только больше, чем B для той же точки сетки. Если A < B, значения A необходимо заменить на NaN в C. Используя следующий код
C = A[A>B]
выдает одномерный массив. В моем случае это дает массив формы (2362,).
Ответ №1:
Вы можете использовать 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.]])
Ответ №2:
Я думаю, 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.]])
РЕДАКТИРОВАТЬ: я неправильно понял, каким должен быть конечный результат, поэтому я обновил это.