【问题标题】:np.linalg.eig() taking a lot time to runnp.linalg.eig() 需要很长时间才能运行
【发布时间】:2020-07-04 23:37:57
【问题描述】:

np.linalg.eig() 函数在 (15000, 15000) 矩阵上花费超过 10 分钟的时间是否正常?我正在使用标准运行时在 colab 环境中运行它。

【问题讨论】:

  • 如果您提供了您使用过的代码 - 其他人可以轻松找出代码是否存在问题。最少的可重现代码总是有帮助的!

标签: python numpy eigenvalue eigenvector


【解决方案1】:

对于 N×N 矩阵,算法应该按照O(N^3) 进行缩放。所以如果 N 需要 T 时间,那么 2N 需要 2^3T = 8T 时间,而 10N 需要 10^3T = 1000T 时间。在我的旧笔记本电脑上,N=1500 需要 3.7 秒。 N=3000 需要 22 秒,这并不是真正的 8*3.7,但已经足够接近了。

现在 3000*5 = 15000,22*5^3 = 2750 秒 = 46 分钟。所以这就是它应该在我的电脑上花费的时间。所以你的电脑速度更快,但 15 分钟似乎还可以!

【讨论】:

  • 嘿,谢谢你的回答!有什么办法可以让我跑得更快吗?也仅供参考,没用15分钟,其实用了很长时间,我说超过10分钟,因为当时它还在运行,已经过了十分钟。
  • @MalavikaUnnikrishnan 如果您需要所有特征值,我认为唯一的补救措施是更多核心。如果您只需要 k 最小或最大特征值,则有更快的算法,并且 numpy 可能也实现了它们。
  • 另一个可能很重要的细节是确保 numpy 使用快速线性代数后端。如果您通过 anaconda 使用 python,那么它应该链接到 mkl。如果您使用一些系统默认 python,则可能使用了一些默认库,这可能会减慢速度。但它在多个线程上运行对吗?
  • @MalavikaUnnikrishnan 如果这回答了您的问题,您可以单击复选标记接受它。 (向上投票的箭头:)
猜你喜欢
  • 2013-10-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-15
  • 2011-01-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多