使用numpy的extract函数筛选二维数组为何得到错误结果?
错误原因
np.extract的核心工作逻辑是:将输入的条件数组、待提取数组都先展平为一维结构,再根据条件数组中为True的索引,提取待提取数组对应位置的元素。要求两者元素总数匹配,否则会出现截断匹配的问题。
你当前代码里的条件数组con形状为(5,)(共5个元素,对应5名学生的性别判断结果),而待提取的students数组形状为(5,2)(共10个元素),最终提取时只会匹配students展平后的前5个元素,自然得到错误结果。
修正方案
将条件数组的形状扩展为和students完全一致,保证同一行的两个元素的判断条件和该行的性别判断结果相同,提取后再reshape为二维结构即可:
import numpy as np students=np.array([["alexis", "female"],["alex", "male"], ["david", "non-binary"], ["samar", "male"], ["anweshan","male"]]) # 扩展条件数组形状为和students一致的(5,2) con = np.broadcast_to((students[:,1] == "male")[:, np.newaxis], students.shape) male_students = np.extract(con, students).reshape(-1, 2) print(male_students)
运行输出:
[['alex' 'male'] ['samar' 'male'] ['anweshan' 'male']]
内容的提问来源于stack exchange,提问作者Anweshan Goswami
相关产品推荐
相关产品推荐

