将带有标记的数组转换为带有字母标记的数组 numpy
Convert an array with marks into an array with letter marks numpy
这里我尝试return一个字母等级数组,但是return只有一个字母等级。
我需要在字母级 numpy 数组中获取整个 numz 数组。
我用了一个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)
这可以用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
,这样才有意义)
这里我尝试return一个字母等级数组,但是return只有一个字母等级。 我需要在字母级 numpy 数组中获取整个 numz 数组。 我用了一个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)
这可以用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
,这样才有意义)