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

为何Numpy大矩阵运算效率骤降?求解性能异常原因

Numpy大规模矩阵运算的效率异常问题分析

在Numpy矩阵/向量运算中,当元素数量扩大后,运算效率出现不符合预期的异常,具体表现如下:

10_000规模的正常运算表现

当数组元素数量为10_000时,各单步运算耗时基本一致,m - m.reshape(len(m), 1)、matrix - shift、np.abs(matrix_s)的耗时均在450ms左右;合并运算np.abs(matrix - shift)的耗时约为单步运算的两倍,符合预期。

In [1]: import numpy as np

In [29]: m = np.random.randn(10_000)

In [30]: shift = 1.0098765

In [31]: %timeit m - m.reshape(len(m), 1)
407 ms ± 5.75 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [32]: matrix = m - m.reshape(len(m), 1)

In [33]: %timeit matrix - shift
443 ms ± 6.45 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [34]: matrix_s = matrix - shift

In [35]: %timeit np.abs(matrix_s)
455 ms ± 3.77 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [36]: %timeit np.abs(matrix - shift)
936 ms ± 89.3 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

20_000规模的异常运算表现

当元素数量增加到20_000时,耗时结果出现明显异常:

  • m - m.reshape(len(m), 1)的运算速度比后续单步运算快10倍;
  • 合并运算np.abs(matrix - shift)的耗时远超过拆分运算(matrix - shift + np.abs(matrix_s))的耗时之和,两者本质是同一计算过程。
In [37]: m = np.random.randn(20_000)

In [39]: %timeit m - m.reshape(len(m), 1)
1.53 s ± 47 ms per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [40]: matrix = m - m.reshape(len(m), 1)

In [41]: %timeit matrix - shift
18.5 s ± 5.59 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [42]: matrix_s = matrix - shift

In [43]: %timeit np.abs(matrix_s)
27.3 s ± 6.65 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

In [44]: %timeit np.abs(matrix - shift)
1min 15s ± 4.29 s per loop (mean ± std. dev. of 7 runs, 1 loop each)

经计算,10_000规模的矩阵约占763MB内存,20_000规模的矩阵约占3GB内存。这种效率异常是否由内存交换(swapping)问题导致?

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 23:42:28