Python 使用二维布尔从三维numpy数组中提取一维数组

Python 使用二维布尔从三维numpy数组中提取一维数组,python,arrays,numpy,indexing,reshape,Python,Arrays,Numpy,Indexing,Reshape,假设我有一个3d numpy阵列: i, j, k = 10, 3, 4 arr = np.arange(120).reshape(i, j, k) 和二维布尔数组: mask = np.random.random((j, k)) > 0.5 n = mask.sum() 我希望能够从arr沿其第一维度提取1d数组,该一维数组与mask的True值相对应。结果应具有形状,(i,n)。这怎么可能呢 我拉了一些旧代码,出于某种原因我正在做arr[mask],但这给出了(n,k)(我不知

假设我有一个3d numpy阵列:

i, j, k = 10, 3, 4

arr = np.arange(120).reshape(i, j, k)
和二维布尔数组:

mask = np.random.random((j, k)) > 0.5

n = mask.sum()
我希望能够从
arr
沿其第一维度提取1d数组,该一维数组与
mask
True
值相对应。结果应具有形状,
(i,n)
。这怎么可能呢

我拉了一些旧代码,出于某种原因我正在做
arr[mask]
,但这给出了
(n,k)
(我不知道为什么)的形状和警告:

VisibleDeprecationWarning: boolean index did not match indexed array along dimension 0; dimension is 10949 but corresponding boolean dimension is 11

只需沿最后两个轴遮罩即可-

arr[:,mask]

发布的解决方案对你有用吗?是的,谢谢!现在这很有道理。