NumPy布尔索引查找数组指定UUID元素语法原理解析
NumPy 语句
array[array[:, 0] == query] 运行逻辑说明 这个语句是NumPy原生支持的布尔索引写法,执行过程拆成三步就很容易理解:
- 第一部分
array[:, 0]是NumPy的多维切片语法:逗号用来分隔不同维度的取值规则,冒号:放在行维度的位置代表取所有行,后面的0代表列维度只取下标为0的元素。执行完这一步,会得到一个一维数组,内容就是原二维数组每一行第一个位置存的UUID值,对应你的数据就是三个UUID组成的一维数组。 - 第二部分
array[:, 0] == query触发NumPy的广播比较机制:和Python原生list直接用==只返回单个布尔值不同,NumPy数组做相等判断时,会逐个遍历数组里的每个元素和query对比,最终返回一个长度和原一维UUID数组完全一致的布尔数组。对应你的查询值,这一步的输出是[True, False, False]——只有第一个UUID和目标值匹配,对应位置为True,其余位置都是False。 - 最后一步用得到的布尔数组作为索引取原数组:NumPy遇到布尔类型的索引时,会按位置一一匹配,只保留布尔值为
True对应的整行内容,自动过滤掉布尔值为False的行,最终输出的就是你要的、包含目标UUID的子数组。
补充说明:这个写法仅对NumPy数组生效,你最开始定义的
array是Python原生嵌套列表,原生list不支持[:, 0]这种多维度切片,也没有广播比较的能力,直接运行会抛出类型错误,必须先将列表转换为NumPy数组后才能使用该语法。
内容的提问来源于stack exchange,提问作者DragonflyRobotics
相关产品推荐
相关产品推荐

