如何使用numpy按带最低计数阈值的规则对分数数组的患者分类
完全可以用numpy实现该需求,所有操作都可以通过numpy向量化运算完成,无需额外编写循环逻辑,代码如下:
import numpy as np # 输入的患者评分二维数组,形状为(患者数, 单患者评分点数),此处为(50, 100) scores = np.array([ [7.0, 10.0, 12.0, 0.0], [0.0, 11.0, 34.0, 1.0], [0.0, 33.0, 34.0, 50.0] # 其余数据省略 ]) # 配置参数 threshold_ratio = 0.2 # 阈值比例,可按需调整 n_per_patient = scores.shape[1] threshold = threshold_ratio * n_per_patient # 按优先级从高到低统计每类的数量(按行统计,即每个患者的对应类别数量) # C类:评分≥50 count_c = (scores >= 50).sum(axis=1) # B类:20≤评分<50(等于50已归入C类,避免边界冲突) count_b = ((scores >= 20) & (scores < 50)).sum(axis=1) # 初始化结果数组,默认分类为A(最低优先级) categories = np.full(scores.shape[0], fill_value='A', dtype='U1') # 先标记符合阈值的B类(优先级低于C,先赋值避免被C覆盖) categories[count_b >= threshold] = 'B' # 最后标记符合阈值的C类(最高优先级) categories[count_c >= threshold] = 'C'
运行后得到的categories就是形状为(50,)的一维数组,每个元素对应一位患者的最终分类,符合你要求的输出格式。
边界说明:原规则中v=50同时满足B、C两类的区间定义,此处按照优先级将v=50归入C类统计,符合你设定的C→B→A的判断顺序。
内容的提问来源于stack exchange,提问作者Amr ALHOSSARY
相关产品推荐
相关产品推荐

