Python 如何简单地按3d numpy数组的第1列值过滤该数组?

Python 如何简单地按3d numpy数组的第1列值过滤该数组?,python,arrays,numpy,Python,Arrays,Numpy,假设我有一个3D numpy数组,如下所示: data = np.array([[[1,2,3,4],[1,2.5,3,5]], [[116,230,450,430],[80,100,300,320]], [[60,100,120,80],[50,80,100,90]]]) 如何简单地从中提取具有相同形状且轴0上有条件的3D numpy数组,例如选择轴0

假设我有一个3D numpy数组,如下所示:

 data = np.array([[[1,2,3,4],[1,2.5,3,5]],
                 [[116,230,450,430],[80,100,300,320]],
                 [[60,100,120,80],[50,80,100,90]]])
如何简单地从中提取具有相同形状且轴0上有条件的3D numpy数组,例如选择轴0<3的那些“行”?一种天真的方式是

data[data[0]<3]

data[data[0]请参见以上我的评论,但从您的数据来看,我猜您需要任何值小于3的行。如果是这样,您可以执行以下操作:

data[(data<3).any(axis=2)]
>>> array([[1. , 2. , 3. , 4. ],
           [1. , 2.5, 3. , 5. ]])

这里您需要更具体一些,一行包含多个数字,因此您应该指定是希望任何数字小于3,所有数字小于3,还是希望其他数字的总和小于3。我不够清楚。通过选择轴0小于3,我的意思是我将获得
dataNew=np.array([[[1,2],[1,2.5]],[[116230],[80100],[[60100],[50,80]])
好的,我已经对我的答案进行了编辑,希望它能帮助索引数组中的转置(括号内)必要吗?我做了另一个不涉及转置的编辑。使用遮罩的诀窍是遮罩形状必须与应用它的阵列或轴相同,在这种情况下,它是最后一个轴。
data.T[(data[0]<3).any(axis=0).T].T
>>> array([[[  1. ,   2. ],
            [  1. ,   2.5]],

           [[116. , 230. ],
            [ 80. , 100. ]],

           [[ 60. , 100. ],
            [ 50. ,  80. ]]])
data[..., (data[0]<3).any(axis=0)]
>>> array([[[  1. ,   2. ],
            [  1. ,   2.5]],

           [[116. , 230. ],
            [ 80. , 100. ]],

           [[ 60. , 100. ],
            [ 50. ,  80. ]]])