过滤基于其他相同大小数组的多维数组
FIlter the multi-D array based other same size array
我有两个相同维度 (1440, 400) 的网格化数据数组 'A' 和 'B'。我想创建一个相同维度 (1440, 400) 的新数组 'C',其中 C 包含来自 A 的网格点的值,对于同一网格点,这些值仅大于 B。如果A < B,需要将A的值替换为C中的NaN。使用以下代码
C = A[A>B]
给出一维数组。在我的例子中,它给出了一个形状数组 (2362,)。
我想 np.where(A>B, A, np.nan)
就是您要找的。当条件 (A>B
) 为真时,它会给你 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.]])
编辑:我误读了最终结果应该如何,所以我更新了这个。
您可以使用 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.]])
我有两个相同维度 (1440, 400) 的网格化数据数组 'A' 和 'B'。我想创建一个相同维度 (1440, 400) 的新数组 'C',其中 C 包含来自 A 的网格点的值,对于同一网格点,这些值仅大于 B。如果A < B,需要将A的值替换为C中的NaN。使用以下代码
C = A[A>B]
给出一维数组。在我的例子中,它给出了一个形状数组 (2362,)。
我想 np.where(A>B, A, np.nan)
就是您要找的。当条件 (A>B
) 为真时,它会给你 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.]])
编辑:我误读了最终结果应该如何,所以我更新了这个。
您可以使用 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.]])