【问题标题】:Convert an array with marks into an array with letter marks numpy将带有标记的数组转换为带有字母标记的数组 numpy
【发布时间】:2021-12-30 15:18:29
【问题描述】:

这里我试图返回一个字母等级的数组,但它只返回一个字母等级。 我需要在字母级 numpy 数组中获取整个 numpz 数组。 我使用了一个for循环,但是由于第一个元素已经完成,它不再继续了。

import numpy as np
from scipy import stats

marks = np.array([90,72,82,90,69,19,23,30,45,5])

#Average of the array
avg = np.average(marks)


mdn = np.median(marks)

stand_dev = np.std(marks)

rang = np.ptp(marks)

mode = stats.mode(marks)

mode = mode[0]

# the loop that turns marks into letter Grade array
def letterGrade(mark):
    for i in range (len(mark)):
        list_new = []
        score = mark[i]
        if  score <= avg:
            return "F"
        elif (( score > avg) & ( score <= mdn)):
            return "D"
        elif (( score > mdn) & (score <= stand_dev)):
            return "C"
        elif (( score > stand_dev) & ( score <= rang)):
            return "B"
        elif (( score > rang) & ( score <= mode)):
            return "A"
        elif score > mode:
            return "A+"
    
    list_new.append(score)

letterGrade(marks)

【问题讨论】:

    标签: arrays numpy arraylist


    【解决方案1】:

    这可以用digitize优雅地解决:

    letters = np.array(['F', 'D', 'C', 'B', 'A', 'A+'])
    bins = [avg, mdn, avg+stand_dev, rang, mode[0], 100]
    letters[np.digitize(marks, bins, True)].tolist()
    

    结果

    ['A', 'C', 'C', 'A', 'C', 'F', 'F', 'F', 'F', 'F']
    

    (请注意,我将 stand_dev 替换为 avg+stand_dev 以便有意义)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-07-02
      • 1970-01-01
      • 1970-01-01
      • 2022-01-01
      • 1970-01-01
      • 2012-11-22
      • 2018-09-18
      • 2013-03-12
      相关资源
      最近更新 更多