這里我嘗試回傳一個字母等級的陣列,但它只回傳一個字母等級。我需要在字母級 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)
uj5u.com熱心網友回復:
這可以優雅地解決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以便它有意義)
uj5u.com熱心網友回復:
def letterGrade(mark):
for i in range (len(mark)):
list_new = []
score = mark[i]
if score <= avg:
list_new.append("F")
elif (( score > avg) & ( score <= mdn)):
list_new.append("D")
elif (( score > mdn) & (score <= stand_dev)):
list_new.append("C")
elif (( score > stand_dev) & ( score <= rang)):
list_new.append("B")
elif (( score > rang) & ( score <= mode)):
list_new.append("A")
elif score > mode:
list_new.append("A ")
return list_new
letterGrade(marks)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/398138.html
