1.假设有一张成绩表记录了10名学生的语文、数学、英语、生物、历史这5门课的成绩,成绩范围均为50~100分。10名学生的学号分别为100、101、102、103、104、105、106、107、108、109。利用numpy完成一下操作: (1)使用随机数模拟学生成绩,并存储在数组中。 (2)查询学号为105的学生的英语成绩。 (3)查询学号为100、102、105、109的4位学生的语文、数学和英语成绩。 (4)查询大于或等于90分的成绩和相应学生的学号。 (5)按各门课程的成绩排序。 (6)按每名学生的成绩排序。 (7)计算每门课程的平均分、最高分和最低分。 (8)计算每名学生的最高分、最低分。 (9)查询最低分及相应的学生学号和课程。 (10)查询最高分及相应的学生学号和课程。 (11)语文、数学、英语、生物、历史这5门课程在总分中的占比分别为25%、25%、20%、15%、15%。如果总分位100分,则计算每名学生的总成绩。 (12)查询最高的3个总分。
时间: 2023-07-10 12:10:49 浏览: 90
以下是使用numpy完成上述操作的代码:
```python
import numpy as np
# (1) 使用随机数模拟学生成绩,并存储在数组中。
grades = np.random.randint(50, 101, size=(10, 5))
student_ids = np.array([100, 101, 102, 103, 104, 105, 106, 107, 108, 109])
# (2) 查询学号为105的学生的英语成绩。
english_grade = grades[np.where(student_ids == 105)[0][0], 2]
print(f"学号为105的学生的英语成绩为:{english_grade}")
# (3) 查询学号为100、102、105、109的4位学生的语文、数学和英语成绩。
selected_student_ids = [100, 102, 105, 109]
selected_grades = grades[np.isin(student_ids, selected_student_ids)][:, :3]
print(f"学号为{selected_student_ids}的学生的语文、数学和英语成绩为:\n{selected_grades}")
# (4) 查询大于或等于90分的成绩和相应学生的学号。
selected_student_ids, selected_subjects = np.where(grades >= 90)
selected_grades = grades[selected_student_ids, selected_subjects]
print(f"大于或等于90分的成绩和相应学生的学号:")
for i in range(len(selected_student_ids)):
print(f"学号:{student_ids[selected_student_ids[i]]},科目:{selected_subjects[i]},成绩:{selected_grades[i]}")
# (5) 按各门课程的成绩排序。
sorted_grades_by_subject = np.sort(grades, axis=0)
print(f"按各门课程的成绩排序:\n{sorted_grades_by_subject}")
# (6) 按每名学生的成绩排序。
sorted_grades_by_student = np.sort(grades, axis=1)
print(f"按每名学生的成绩排序:\n{sorted_grades_by_student}")
# (7) 计算每门课程的平均分、最高分和最低分。
mean_grades = np.mean(grades, axis=0)
max_grades = np.max(grades, axis=0)
min_grades = np.min(grades, axis=0)
print(f"每门课程的平均分:{mean_grades}")
print(f"每门课程的最高分:{max_grades}")
print(f"每门课程的最低分:{min_grades}")
# (8) 计算每名学生的最高分、最低分。
max_grades_by_student = np.max(grades, axis=1)
min_grades_by_student = np.min(grades, axis=1)
print(f"每名学生的最高分:{max_grades_by_student}")
print(f"每名学生的最低分:{min_grades_by_student}")
# (9) 查询最低分及相应的学生学号和课程。
min_grade = np.min(grades)
selected_student_ids, selected_subjects = np.where(grades == min_grade)
print(f"最低分为{min_grade}的学生学号和课程:")
for i in range(len(selected_student_ids)):
print(f"学号:{student_ids[selected_student_ids[i]]},科目:{selected_subjects[i]}")
# (10) 查询最高分及相应的学生学号和课程。
max_grade = np.max(grades)
selected_student_ids, selected_subjects = np.where(grades == max_grade)
print(f"最高分为{max_grade}的学生学号和课程:")
for i in range(len(selected_student_ids)):
print(f"学号:{student_ids[selected_student_ids[i]]},科目:{selected_subjects[i]}")
# (11) 计算每名学生的总成绩。
weights = np.array([0.25, 0.25, 0.2, 0.15, 0.15])
total_grades = np.dot(grades, weights)
print(f"每名学生的总成绩:{total_grades}")
# (12) 查询最高的3个总分。
top3_total_grades = np.sort(total_grades)[-3:]
top3_student_ids = student_ids[np.argsort(total_grades)[-3:]]
print(f"最高的3个总分为{top3_total_grades},对应的学生学号为{top3_student_ids}")
```
阅读全文