2.4 综合练习

题目 1:温度数据分析

题目:某城市一周的最高气温(℃)为 [28, 30, 29, 31, 32, 30, 29]。  

  • 计算平均气温、最高气温和最低气温。  
  • 找出气温超过 30℃ 的天数。  

解析:

  1. 使用 np.mean() 计算平均值。  
  2. 使用 np.max() 和 np.min() 计算极值。  
  3. 使用布尔索引 arr[arr > 30] 筛选数据。  

答案:

import numpy as np
temps = np.array([28, 30, 29, 31, 32, 30, 29])
print("平均气温:", np.mean(temps))  # 29.857
print("最高气温:", np.max(temps))   # 32
print("最低气温:", np.min(temps))   # 28
print("超过30℃的天数:", len(temps[temps > 30]))  # 2

题目 2:学生成绩统计

题目:某班级 5 名学生的数学成绩为 [85, 90, 78, 92, 88]。  

  • 计算成绩的平均分、中位数和标准差。  
  • 将成绩转换为百分制(假设满分为 100)。  

解析:

  1. 使用 np.mean()、np.median() 和 np.std() 计算统计量。  
  2. 百分制无需转换(已经是百分制)。  

答案:

scores = np.array([85, 90, 78, 92, 88])
print("平均分:", np.mean(scores))      # 86.6
print("中位数:", np.median(scores))    # 88
print("标准差:", np.std(scores))       # 4.98

题目 3:矩阵运算

题目:给定矩阵 A = [[1, 2], [3, 4]] 和 B = [[5, 6], [7, 8]]。  

  • 计算 A + B 和 A * B(逐元素乘法)。  
  • 计算 A 和 B 的矩阵乘法(点积)。  

解析:

  1. A + B 和 A * B 是逐元素运算。  
  2. 矩阵乘法用 A @ B 或 np.dot(A, B)。  

答案:

A = np.array([[1, 2], [3, 4]])
B = np.array([[5, 6], [7, 8]])
print("A + B:\n", A + B)  # [[6, 8], [10, 12]]
print("A * B:\n", A * B)  # [[5, 12], [21, 32]]
print("A @ B:\n", A @ B)  # [[19, 22], [43, 50]]

题目 4:随机数据生成

题目:生成一个 (3, 4) 的随机整数数组,范围 [0, 10)。  

  • 计算每列的最大值和每行的最小值。  
  • 将数组中的所有奇数替换为 -1。  

解析:

  1. 使用 np.random.randint() 生成随机数。  
  2. np.max(axis=0) 计算列最大值,np.min(axis=1) 计算行最小值。  
  3. 使用布尔索引 arr[arr % 2 == 1] = -1 替换奇数。  

答案:

arr = np.random.randint(0, 10, (3, 4))
print("原数组:\n", arr)
print("每列最大值:", np.max(arr, axis=0))
print("每行最小值:", np.min(arr, axis=1))
arr[arr % 2 == 1] = -1  # 奇数替换为-1
print("替换后:\n", arr)

题目 5:数组变形

题目:创建一个 1 到 12 的一维数组,并转换为 (3, 4) 的二维数组。  

  • 计算每行的和与每列的平均值。  
  • 将数组展平为一维数组。  

解析:

  1. 用 np.arange(1, 13).reshape(3, 4) 创建数组。  
  2. np.sum(axis=1) 计算行和,np.mean(axis=0) 计算列均值。  
  3. arr.flatten() 展平数组。  

答案:

arr = np.arange(1, 13).reshape(3, 4)
print("每行和:", np.sum(arr, axis=1))  # [10, 26, 42]
print("每列均值:", np.mean(arr, axis=0))  # [5, 6, 7, 8]
print("展平后:", arr.flatten())  # [1, 2, ..., 12]

题目 6:布尔索引

题目:生成一个 (5, 5) 的随机数组,范围 [0, 20)。  

  • 找出数组中大于 10 的元素。  
  • 将所有大于 10 的元素替换为 0。  

解析:

  1. 使用 np.random.randint() 生成数组。  
  2. 用 arr[arr > 10] 筛选元素。  
  3. 直接赋值 arr[arr > 10] = 0 替换。  

答案:

arr = np.random.randint(0, 20, (5, 5))
print(">10的元素:", arr[arr > 10])
arr[arr > 10] = 0  # 替换为0
print("替换后:\n", arr)

题目 7:统计函数应用

题目:某公司 6 个月的销售额(万元)为 [120, 135, 110, 125, 130, 140]。  

  • 计算销售额的总和、均值和方差。  
  • 找出销售额最高的月份和最低的月份。  

解析:

  1. np.sum()、np.mean()、np.var() 计算统计量。  
  2. np.argmax() 和 np.argmin() 返回极值索引。  

答案:

sales = np.array([120, 135, 110, 125, 130, 140])
print("总和:", np.sum(sales))        # 760
print("均值:", np.mean(sales))       # 126.67
print("方差:", np.var(sales))        # 108.89
print("最高月份:", np.argmax(sales) + 1)  # 6
print("最低月份:", np.argmin(sales) + 1)  # 3

题目 8:数组拼接

题目:给定 A = [1, 2, 3] 和 B = [4, 5, 6]。  

  • 水平拼接为 [1, 2, 3, 4, 5, 6]。  
  • 垂直拼接为 [[1, 2, 3], [4, 5, 6]]。  

解析:

  1. 水平拼接用 np.concatenate((A, B))。  
  2. 垂直拼接需先转为二维 np.vstack((A, B))。  

答案:

A, B = np.array([1, 2, 3]), np.array([4, 5, 6])
print("水平拼接:", np.concatenate((A, B)))  # [1, 2, 3, 4, 5, 6]
print("垂直拼接:\n", np.vstack((A, B)))    # [[1,2,3], [4,5,6]]

题目 9:唯一值与排序

题目:给定数组 [2, 1, 2, 3, 1, 4, 3]。  

  • 找出唯一值并排序。  
  • 计算每个唯一值出现的次数。  

解析:

  1. np.unique() 返回唯一值并排序。  
  2. return_counts=True 统计频次。  

答案:

arr = np.array([2, 1, 2, 3, 1, 4, 3])
unique_values, counts = np.unique(arr, return_counts=True)
print("唯一值:", unique_values)  # [1, 2, 3, 4]
print("出现次数:", counts)       # [2, 2, 2, 1]

题目 10:缺失值处理

题目:给定数组 [1, np.nan, 3, np.nan, 5]。  

  • 计算非缺失值的数量。  
  • 将缺失值替换为 0。  

解析:

  1. np.isnan() 检测缺失值。  
  2. ~np.isnan(arr) 计算非缺失值数量。  
  3. arr[np.isnan(arr)] = 0 替换缺失值。  

答案:

arr = np.array([1, np.nan, 3, np.nan, 5])
print("非缺失值数量:", np.sum(~np.isnan(arr)))  # 3
arr[np.isnan(arr)] = 0  # 替换为0
print("替换后:", arr)  # [1, 0, 3, 0, 5]

© 版权声明
THE END
喜欢就支持一下吧
点赞12 分享
评论 抢沙发
头像-大赛人网
欢迎您留下宝贵的见解!
提交
头像-大赛人网

昵称

取消
昵称

    请登录后查看评论内容