Python 如何在给定数目的3D数组中获取2D切片

Python 如何在给定数目的3D数组中获取2D切片,python,arrays,numpy,Python,Arrays,Numpy,我有一个3D数组,我想用一个给定的值屏蔽它。该值仅出现在该3D阵列沿该阵列z方向(轴0)的一个2D切片中,因此沿z方向的所有其他切片都将为False 如何仅提取数字出现的二维数组,以及数字出现的二维切片在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数组,我想用一个给定的值屏蔽它。该值仅出现在该3D阵列沿该阵列z方向(轴0)的一个2D切片中,因此沿z方向的所有其他切片都将为False

如何仅提取数字出现的二维数组,以及数字出现的二维切片在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

如何实现这一点?

只要您知道,该条件仅沿称为z方向的轴满足,就可以使用以下组合。您可以使用
(array==2)
获取布尔数组,以找出满足条件的位置,然后使用
np.any
查找正确的切片。然后,您可以使用查找切片索引,然后提取该索引:

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(conditionMet.any(axis=(1, 2)), conditionMet, axis=0)[0]

但是,请注意,这不会为您提供z索引。因此,如果需要,您将需要使用
np.where

您能具体键入所需的输出吗?对于一般情况,
True
可能出现在2维以上。输入是什么?很好,但是可以直接获得布尔数组吗?:)我知道,也许我应该写另一个问题,但你知道这是关于什么的,我认为这应该是一个简单的命令,但我现在如何用我提取的布尔2d切片替换3d数组中的所有3个切片?,因此,所有3个2d切片都是same@Liwellyen是否确实要用布尔值替换它,还是要重复原始切片?对于后者,只需执行以下操作:
array[:]=array[zIndex]
。对于前者:是否还要将数组的
dtype
更改为bool?