You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

numpy.linalg.solve在1.26.4与2.0.0版本间性能剧变原因问询

NumPy v2.0.0与v1.26.4中numpy.linalg.solve的性能差异分析

性能差异现象

  • 该差异在Linux、Windows系统中均存在,暂未测试macOS
  • 矩阵规模不同,版本间性能表现呈现三段式反转:
    • 规模≤1800x1800:v2.0.0速度显著更快,Linux平台最高快10倍,Windows平台提速更明显
    • 规模1800x1800 ~ 8800x8800:v1.26.4速度更优
    • 规模>8800x8800:v2.0.0再次具备性能优势

疑问

  1. 该性能差异是否由底层依赖库更新导致?
  2. 此类影响性能的修改未在官方发布说明中找到相关记录,希望明确原因

基准测试代码

使用perfplot进行性能测试,代码如下:

import matplotlib.pyplot as plt
import numpy as np
import perfplot


def main():
    plot = False

    if not plot:
        out = perfplot.bench(
            setup=lambda n: np.random.rand(n + 1, n),
            kernels=[lambda a: np.linalg.solve(a[1:], a[0])],
            n_range=[2**k for k in range(15)],
        )

        np.savetxt("n.txt", out.n_range)
        np.savetxt(f"timings_{np.__version__.replace('.', '_')}.txt", out.timings_s)
    else:
        n = np.loadtxt("n.txt")
        timings_1_26_4 = np.loadtxt("timings_1_26_4.txt")
        timings_2_0_0 = np.loadtxt("timings_2_0_0.txt")

        plt.plot(n, timings_1_26_4, label="1.26.4")
        plt.plot(n, timings_2_0_0, label="2.0.0")
        plt.legend()
        plt.show()

        plt.plot(n, timings_1_26_4 / timings_2_0_0, label="1.26.4 / 2.0.0")
        plt.plot([0, 2**14], [1.0, 1.0])
        plt.legend()
        plt.show()


if __name__ == "__main__":
    main()

测试结果说明

分别在numpy1.26.4和numpy2.0.0环境下运行代码,设置plot=True生成图表:

  1. 整体性能对比图:横轴为线性系统未知数数量,纵轴为求解耗时(单位:秒),直观展示两个版本的耗时变化趋势
  2. 小范围放大图:聚焦n≤200的区间,清晰呈现小规模矩阵下的性能差异细节
  3. 耗时比值图:横轴为未知数数量,纵轴为v1.26.4与v2.0.0的耗时比值,水平线y=1作为性能分界(曲线在水平线上方时,v2.0.0速度更快)。其中n≈35时性能差异达到峰值,v2.0.0速度是v1.26.4的10倍

内容的提问来源于stack exchange,提问作者bluthej

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.18 11:57:12