Python 基于其他相同大小的数组过滤多维数组
我有两个相同维度的网格数据“A”和“B”数组(1440400)。我想创建一个相同维度(1440400)的新数组“C”,其中C包含来自a的网格点的值,对于同一网格点,该值仅大于B。如果APython 基于其他相同大小的数组过滤多维数组,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>
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.]])