我有一个3D数组,我想用给定的值掩盖它。该值仅发生在沿该阵列的z方向(轴0)的该3D阵列的一个2D切片中,因此沿z方向的所有其他切片将为False。
我如何只提取出现数字的2d数组,以及它所在的2d切片的z维度中的位置?
所以我想说我有一个小型3D阵列:
import numpy as np
array = np.zeros((3,3,3))
array[2] = np.array([[2,2,0],[2,2,0],[2,2,0]])
print(array==2)
所以用值2掩盖3d数组会给我整个3d数组,但我只需要它出现的2d切片,在这种情况下它将是3d数组中的第三个切片。
期望输出:
[[ True True False]
[ True True False]
[ True True False]]
slice: 2
我怎样才能做到这一点?
答案 0 :(得分:2)
只要您知道,只有您调用z方向的轴才能满足条件,您可以使用numpy.any
的组合。您可以使用(array==2)
获取布尔数组以找出满足条件的位置,然后使用np.any
查找正确的切片。然后,您可以使用np.where
找到切片索引,然后提取该索引:
import numpy as np
array = np.zeros((3,3,3))
array[2] = np.array([[2,2,0],[2,2,0],[2,2,0]])
valueToFind = 2
conditionMet = (array==valueToFind)
zIndex = np.where(conditionMet.any(axis=(1, 2)))[0][0]
print(conditionMet[zIndex])
print("slice: {}".format(zIndex))
或者,您可以使用np.compress
来提取切片。
np.compress(conditionMet.any(axis=(1, 2)), conditionMet, axis=0)[0]
但请注意,这不会为您提供z索引。因此,如果您需要,则无论如何都需要使用np.where
。