Python 如何在numpy中筛选三维数组

Python 如何在numpy中筛选三维数组,python,numpy,Python,Numpy,我知道这是numpy最简单的任务之一,但我不明白。我有一个数组: import numpy as np u1 = np.array([[[-2.04853845, -1.47283101, 1. ], [-2.05009646, -1.46780913, 1. ], [-2.05165539, -1.46278426, 1. ]], [[-4.94165

我知道这是numpy最简单的任务之一,但我不明白。我有一个数组:

import numpy as np

u1 = np.array([[[-2.04853845, -1.47283101,  1.        ],
                [-2.05009646, -1.46780913,  1.        ],
                [-2.05165539, -1.46278426,  1.        ]],
               [[-4.94165412,  7.8524744 ,  1.        ],
                [ 0.94540647,   0.86456925,  1.       ],
                [-4.94916228,  7.87667525,  1.        ]]])
u1是矩阵的摘要。矩阵的实际大小为:

u1.shape
(813, 1200, 3)
我想得到最后一个数组(最后一个维度)的第一个和第二个元素介于0和1之间的所有值,所以我得到了包含布尔值的和数组,这样我就可以索引具有相同形状的另一个数组


我打赌这是一个重复的问题,但我没有找到它。谢谢,您正在寻找以下信息:

将numpy导入为np
u1=np.数组([-2.04853845,-1.47283101,1.],
[-2.05009646, -1.46780913,  1.],
[-2.05165539, -1.46278426,  1.]],
[[-4.94165412,  7.8524744,   1.],
[ 0.94540647,  0.86456925,  1.],
[-4.94916228,  7.87667525,  1.]]])

np.logical_和(u1[:,:,0:2]>0,u1[:,:,0:2]提取元素并与值进行比较:

import numpy as np

u1 = np.array([[[-2.04853845, -1.47283101,  1.        ],
                [-2.05009646, -1.46780913,  1.        ],
                [-2.05165539, -1.46278426,  1.        ]],
               [[-4.94165412,  7.8524744 ,  1.        ],
                [ 0.94540647,   0.86456925,  1.       ],
                [-4.94916228,  7.87667525,  1.        ]]])

first = (u1[:, :, 0] > 0) * (u1[:, :, 0] < 1)
second = (u1[:, :, 1] > 0) * (u1[:, :, 1] < 1)

condition = first * second
# Condition is:
# [[False False False]
# [False  True False]]

定义以下函数检查行的前2个元素:

def myfunc(row):
    return np.logical_and(row[0:2] >= 0, row[0:2] <= 1).all()
对于示例数据,结果是:

array([[False, False, False],
       [False,  True, False]])

到目前为止,您尝试了什么?您阅读了numpy文档吗?是的,但我没有找到我需要的内容。似乎我需要使用np.logical_和(),无论如何,谢谢numpy文档非常优秀,请参阅您案例中的“索引”一节:
np.apply_along_axis( myfunc, axis=-1, arr=u1 )
array([[False, False, False],
       [False,  True, False]])