在python中跨一个轴查找3D数组中的最小值,并将另一个3D数组中的非对应值替换为0(不带循环)
假设我们有两个3D数组,A(x,y,z)和B(x,y,z),x,y,z是维度。我想识别A数组中z轴上的所有最小值,然后根据这些值及其索引选择B中的相应值,保留它们,并将其他值替换为零。您可以稍微改变一下想法。在在python中跨一个轴查找3D数组中的最小值,并将另一个3D数组中的非对应值替换为0(不带循环),python,numpy,indexing,min,substitution,Python,Numpy,Indexing,Min,Substitution,假设我们有两个3D数组,A(x,y,z)和B(x,y,z),x,y,z是维度。我想识别A数组中z轴上的所有最小值,然后根据这些值及其索引选择B中的相应值,保留它们,并将其他值替换为零。您可以稍微改变一下想法。在A中查找极小值的位置非常简单: ind = np.expand_dims(np.argmin(A, axis=2), axis=2) 您可以执行以下操作之一: 最简单:创建B的替换项并填充相关元素: C = np.zeros_like(B) np.put_along_axis(C,
A
中查找极小值的位置非常简单:
ind = np.expand_dims(np.argmin(A, axis=2), axis=2)
您可以执行以下操作之一:
B
的替换项并填充相关元素:
C = np.zeros_like(B)
np.put_along_axis(C, ind, np.take_along_axis(B, ind, 2), 2)
values = np.take_along_axis(B, ind, 2)
B[:] = 0
np.put_along_axis(B, ind, values, 2)
mask = np.ones(B.shape, dtype=bool)
np.put_along_axis(mask, ind, False, 2)
B[mask] = 0
沿_轴取
和沿_轴放置
的调用。特别是:
indx, indy = np.indices(A.shape[:-1])
indz = np.argmin(A, axis=-1)
然后,上面的示例转换为
C = np.zeros_like(B)
C[indx, indy, indz] = B[indx, indy, indz]
values = B[indx, indy, indz]
B[:] = 0
B[indx, indy, indz] = values
mask = np.ones(B.shape, dtype=bool)
mask[indx, indy, indz] = False
B[mask] = 0