Python 基于其他相同大小的数组过滤多维数组

Python 基于其他相同大小的数组过滤多维数组,python,arrays,python-xarray,Python,Arrays,Python Xarray,我有两个相同维度的网格数据“A”和“B”数组(1440400)。我想创建一个相同维度(1440400)的新数组“C”,其中C包含来自a的网格点的值,对于同一网格点,该值仅大于B。如果AB,A,np.nan)是你要找的。当条件(A>B)为真时,将为您提供A,当条件为假时,将为您提供B。下面是一个例子: import numpy as np A = np.ones((1440, 400)) B = np.zeros((1440, 400)) B[0, 0] = 3 C = np.where(A>

我有两个相同维度的网格数据“A”和“B”数组(1440400)。我想创建一个相同维度(1440400)的新数组“C”,其中C包含来自a的网格点的值,对于同一网格点,该值仅大于B。如果A
C = A[A>B]
给出一个一维数组。在我的例子中,它给出了一个形状数组(2362,)

我认为,
np.where(A>B,A,np.nan)
是你要找的。当条件(
A>B
)为真时,将为您提供
A
,当条件为假时,将为您提供
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.]])

编辑:我误读了最终结果应该是怎样的,所以我更新了它。

您可以使用
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.]])