【问题标题】:Why is enthought mkl routine slower than matlab为什么 enthought mkl 例程比 matlab 慢
【发布时间】:2012-09-08 16:45:58
【问题描述】:

我正在测试 python enthought 分布的线性代数运行的速度,它声称与 windows 平台上的 intel MKL 链接。我在 IPython 交互式 shell 中做了以下操作:

import scipy.linalg as la
import numpy.random
M = random.rand(1000,1000)
%timeit la.svd(M);

svd() 通常需要 1.3 秒。但是,如果我使用 matlab R2011a 并使用M=rand(1000);tic;svd(M);toc,通常只需要 0.68 秒。

我之前看到过类似的问题,比较 MKL 和 ATLAS 或其他一些非 MKL 构建的 scipy 与 matlab 使用的 MKL。但是我这里的情况应该正是python调用的MKL和matlabR2011a调用的MKL的比较。所以我完全不知道为什么结果如此不同。这对于从 matlab 迁移到 python 来说是如此令人沮丧。

顺便说一下,enthough 使用的 MKL 版本是 10.3.1,而 matlab R2011a 的版本是 10.2.6。

【问题讨论】:

    标签: python matlab numpy scipy


    【解决方案1】:

    Numpy 的 la.svd(M) 计算 U、S 和 V,而 Matlab 的 svd(M) 仅计算 S。尝试与 la.svd(M, compute_uv=False)[U,S,V]=svd(M) 进行比较。

    【讨论】:

    • 好的,非常感谢。这应该是原因。当我使用 la.svd(M, compute_uv=False) 时,时间成本降低到 0.5~0.6 秒,这与 matlab 中的几乎相同。当我比较 la.svd(M) 和 [U S V]=svd(M) 时,python 需要约 1.1 秒,而 matlab 需要约 1.07 秒,彼此非常接近。我可以说这个微小的差异是由于 python 在分配/管理内存空间和相关内容方面的开销更高吗?
    猜你喜欢
    • 2012-09-16
    • 2020-11-27
    • 1970-01-01
    • 2012-03-15
    • 2011-03-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多