如何绘制矩阵阶数与矩阵乘法运算耗时的关系曲线图?
矩阵乘法耗时与阶数关系图表实现方案
原代码存在的问题
- 依赖手动输入矩阵阶数,无法自动批量测试不同规模的矩阵
- 计时包含了输入、打印等非乘法操作的时间,结果不准确
- 硬编码的
x、y列表无实际测试数据,图表无意义 - 手动实现的三重循环矩阵乘法效率极低,大阶数计算会异常缓慢甚至卡死
- 坐标轴标签与数据不匹配,没有实际数据支撑
修改后的代码实现
import numpy as np from time import time import matplotlib.pyplot as plt np.random.seed(27) # 定义测试的矩阵阶数范围:从10到100,步长10(对应需求的Y轴范围) matrix_orders = range(10, 101, 10) time_taken_list = [] def multiply_matrix(A, B): # 使用numpy内置矩阵乘法,效率远高于手动三重循环 return A @ B for order in matrix_orders: # 生成方阵:保证矩阵可乘,结果矩阵阶数与输入阶数一致 A = np.random.randint(1, 10, size=(order, order)) B = np.random.randint(1, 10, size=(order, order)) # 仅计时矩阵乘法核心操作 start = time() multiply_matrix(A, B) end = time() # 记录耗时(保留两位小数) elapsed_time = round(end - start, 2) time_taken_list.append(elapsed_time) print(f"阶数{order}的矩阵乘法耗时:{elapsed_time}秒") # 按需求设置坐标轴:X轴为耗时,Y轴为矩阵阶数 plt.scatter(time_taken_list, matrix_orders, color='blue', label='测试数据') plt.plot(time_taken_list, matrix_orders, color='red', linestyle='--') # 设置图表标签与标题 plt.xlabel('矩阵乘法耗时(秒)') plt.ylabel('结果矩阵的阶数') plt.title('矩阵乘法耗时与阶数关系') # 调整坐标轴范围(可根据实际测试数据修改) plt.ylim(0, 110) # 覆盖0-100的阶数范围 plt.grid(True) plt.legend() plt.show()
关键改动说明
- 批量测试:用
range(10, 101, 10)自动生成10到100步长10的阶数,无需手动输入 - 准确计时:仅在矩阵乘法前后记录时间,排除输入、打印等操作的干扰
- 高效乘法:替换手动三重循环为numpy的
@运算符,利用底层优化大幅提升计算速度,可快速处理大阶数矩阵 - 数据收集:将每个阶数对应的耗时存入列表,作为图表的真实数据源
- 图表匹配需求:用散点+折线展示(耗时X轴,阶数Y轴),添加网格和图例提升可读性
补充说明
如果需要测试更大阶数(比如100-1000,步长100),只需修改matrix_orders = range(100, 1001, 100)即可。注意:阶数超过200后,耗时会随阶数增长显著提升,可根据硬件性能调整测试范围。
内容的提问来源于stack exchange,提问作者Vaibhav Kapoor
相关产品推荐
相关产品推荐

