将两个 numpy 数组之间的所有非相交值替换为 0
Replace all non-intersecting values with 0, between two numpy arrays
假设我有一个多维数组,例如:
a = array([[[86, 27],
[26, 59]],
[[ 1, 16],
[46, 5]],
[[71, 85],
[ 6, 71]]])
假设我有一个一维数组 (b
),其中一些值可以在我的多维数组 (a
) 中看到:
b = [26, 16, 6, 71]
现在我想用零替换数组 a
中的所有非交叉值。我想得到以下结果:
a = array([[[0, 0],
[26, 0]],
[[ 0, 16],
[ 0, 0]],
[[71, 0],
[ 6, 71]]])
我怎样才能做到这一点?
我尝试了几种编码方式,但都没有用。我希望以下行可以工作,但我认为以这种格式使用 not in
存在问题:
a = np.where(a not in b, int(0), a)
尝试此操作时出现以下错误:
arr = np.where(arr not in required_intensities, int(0), arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不确定接下来要尝试什么。有什么想法吗?
np.isin()
非常适合这个:
a[~np.isin(a, b)] = 0
输出:
>>> a
array([[[ 0, 0],
[26, 0]],
[[ 0, 16],
[ 0, 0]],
[[71, 0],
[ 6, 71]]])
假设我有一个多维数组,例如:
a = array([[[86, 27],
[26, 59]],
[[ 1, 16],
[46, 5]],
[[71, 85],
[ 6, 71]]])
假设我有一个一维数组 (b
),其中一些值可以在我的多维数组 (a
) 中看到:
b = [26, 16, 6, 71]
现在我想用零替换数组 a
中的所有非交叉值。我想得到以下结果:
a = array([[[0, 0],
[26, 0]],
[[ 0, 16],
[ 0, 0]],
[[71, 0],
[ 6, 71]]])
我怎样才能做到这一点?
我尝试了几种编码方式,但都没有用。我希望以下行可以工作,但我认为以这种格式使用 not in
存在问题:
a = np.where(a not in b, int(0), a)
尝试此操作时出现以下错误:
arr = np.where(arr not in required_intensities, int(0), arr)
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
我不确定接下来要尝试什么。有什么想法吗?
np.isin()
非常适合这个:
a[~np.isin(a, b)] = 0
输出:
>>> a
array([[[ 0, 0],
[26, 0]],
[[ 0, 16],
[ 0, 0]],
[[71, 0],
[ 6, 71]]])