【问题标题】:Error when diagonalising large matrices using anaconda scipy使用 anaconda scipy 对大矩阵进行对角化时出错
【发布时间】:2017-12-26 09:41:39
【问题描述】:

我最近从在 mac OS X 上使用 homebrew python 切换到使用 anaconda,并且在对角化大(ish)矩阵时开始出现错误。使用超过 3000x3000 个条目的矩阵调用 scipy.linalg.eigvalsh(A) 会出现错误:

$HOME/anaconda2/lib/python2.7/site-packages/scipy/linalg/decomp.pyc in eigvalsh(a, b, lower, overwrite_a, overwrite_b, turbo, eigvals, type, check_finite)
    762                 overwrite_a=overwrite_a, overwrite_b=overwrite_b,
    763                 turbo=turbo, eigvals=eigvals, type=type,
--> 764                 check_finite=check_finite)
    765 
    766 

$HOME/anaconda2/lib/python2.7/site-packages/scipy/linalg/decomp.pyc in eigh(a, b, lower, eigvals_only, overwrite_a, overwrite_b, turbo, eigvals, type, check_finite)
    385         if eigvals is None:
    386             w, v, info = evr(a1, uplo=uplo, jobz=_job, range="A", il=1,
--> 387                              iu=a1.shape[0], overwrite_a=overwrite_a)
    388         else:
    389             (lo, hi) = eigvals

ValueError: On entry to ZHBRDB parameter number 12 had an illegal value

最后的错误消息似乎类似于这个旧的 scipy 问题:scipy/issues/5401,但我遇到问题的矩阵要小得多。

运行print np.__config__.show() 给出:

lapack_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['$HOME/anaconda2/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['$HOME/anaconda2/include']
blas_opt_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['$HOME/anaconda2/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['$HOME/anaconda2/include']
lapack_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['$HOME/anaconda2/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['$HOME/anaconda2/include']
blas_mkl_info:
    libraries = ['mkl_rt', 'pthread']
    library_dirs = ['$HOME/anaconda2/lib']
    define_macros = [('SCIPY_MKL_H', None), ('HAVE_CBLAS', None)]
    include_dirs = ['$HOME/anaconda2/include']
None

【问题讨论】:

  • Anaconda 可能使用旧版本的 Lapack 来支持向后兼容性。你使用的是什么版本的 SciPy?
  • 我正在使用运行 anaconda 更新的最新版本,'1.0.0'
  • 您现在可能正在使用 MKL,而之前可能有所不同。
  • 是的,我认为这是正确的,我已将 np.__config__.show() 的输出添加到问题中
  • 这是已知的,我认为 MKL+conda 中的一个错误 github.com/scipy/scipy/issues/8205

标签: python scipy anaconda lapack


【解决方案1】:

就目前而言,这是一个 MKL 错误,根据SciPy issue 8205 中的讨论,@brd490 已善意报告,并且是accepted by the Intel MKL team

请注意,OpenBLAS 构建的 SciPy 没有此问题。然而,与此同时,我们也注意到scipy.linalg.eigh 中的最佳工作区数组大小不正确。一旦决定如何更改底层?SYEVR/ 的签名,这也将得到纠正。 ?HEEVR 包装器。

作为奖励,可能有人能够有选择地计算特征值,因为最初这些例程允许这样做,但没有在 scipy.linalg.eigh 中公开。

【讨论】:

    猜你喜欢
    • 2013-10-11
    • 1970-01-01
    • 2018-03-02
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-28
    • 2014-09-20
    相关资源
    最近更新 更多