如何在给定数字出现的3D数组中获取2D切片

时间:2018-03-22 11:46:14

标签: python arrays numpy

我有一个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

我怎样才能做到这一点?

1 个答案:

答案 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