【问题标题】:how to categorize sum of score from a numpy array having a minimum threshold如何对具有最小阈值的numpy数组中的分数总和进行分类
【发布时间】:2021-10-18 09:29:35
【问题描述】:

我有一个包含 50 名患者和 100 得分数据点的 numpy 二维数组。

scores = 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]])

每个分数都是一个非负浮点值,将根据范围条件 {v ((25 < a) & (a < 100)).sum() 来完成,如this thread

现在我需要根据每个患者获得的最高分为他分配一个类别,前提是类别数据点的count>= 某个阈值(例如 20%)。 p>

例如(以 100 个数据点中的 20% 作为阈值):

  • 如果患者 i 得分 25 个严重程度为“C”的数据点 -> 他被归类为 C(严重)
  • 如果患者 i 获得了 15 个严重性“C”的数据点和 15 个严重性“B”的数据点 -> 他被归类为 B(中度)。

有没有办法在 numpy 中自动执行此操作?

提前谢谢你。

更新: 预期输出应该是相同长度的数字或患者 (50,) 的一维数组,形式为 categories = ['A', 'C', 'A', .... 'B'],其中每个值都是患者的总体类别。

【问题讨论】:

    标签: python arrays numpy


    【解决方案1】:

    映射值

    你可以使用numpy.select:

    scores = np.array([[7.0, 10.0, 12.0, 0.0],
                       [0.0, 11.0, 34.0, 55],
                       [55,55,0,44],
                       ])
    
    out = np.select([scores<20, (20<=scores)&(scores<50), 50<=scores],
                    ['A', 'B', 'C'])
    

    输出:

    array([['A', 'A', 'A', 'A'],
           ['A', 'A', 'B', 'C'],
           ['C', 'C', 'A', 'B']], dtype='<U3')
    

    获得最频繁的

    这里使用numpy.unique:

    categories np.unique(out, axis=1)[:,0]
    

    输出:

    array(['A', 'A', 'C'], dtype='<U3')
    

    【讨论】:

    • 这就是第一部分。第二部分呢?
    • 你能提供一个示例输出吗?
    • 好的,我更新了问题
    • @AmrALHOSSARY 好的,检查编辑
    • 感谢您的编辑。但是,它不能解决我的问题,我需要根据他收到的最高分数为每个患者分配一个类别,前提是类别数据点的计数 >= 某个阈值(例如 20%)。例如(以 20% 作为阈值):如果患者 i 获得 25 个严重程度为“C”的数据点 -> 如果患者 i 获得 15 个严重程度为“C”的数据点和 15 个严重程度的数据点,则他被归类为 C(严重) 'B' -> 他被归类为 B(中等)。
    【解决方案2】:

    一步到位

    data = get_the_data()
    data[:, :-1].sort()  # sort the data descending along the last dimension.
    data_categorized = data[:, 20]  # Threshold is 20% at least
    # Now I can categorize directly
    out = np.select([data<20, (20<=data)&(data<50), 50<=data], ['A', 'B', 'C'])
    

    我没有对每个数据点进行分类,然后根据至少 20% 的严重性阈值将患者作为一个整体进行分类,而是按降序对数组进行排序,然后我选取了第 20 个项目(共 100 个)。

    按降序排序,我确信当我选择第 20 项时,它之前的所有项目都具有相同或更高的严重性。

    【讨论】:

      猜你喜欢
      • 2017-09-01
      • 2021-04-15
      • 1970-01-01
      • 1970-01-01
      • 2014-06-29
      • 2020-07-03
      • 2019-10-25
      相关资源
      最近更新 更多