python - 使用 anaconda scipy 对角化大型矩阵时出错

标签 python scipy anaconda lapack

我最近从在 mac OS X 上使用自制 python 切换到使用 anaconda,并且在对角化大型矩阵时开始出现错误。使用上面约 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

最佳答案

就目前情况而言,这是一个 MKL 错误,已由 @brd490 友好报告。根据SciPy issue 8205中的讨论是 accepted by the Intel MKL team

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

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

关于python - 使用 anaconda scipy 对角化大型矩阵时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47836266/

相关文章:

python - 为 Ubuntu 发布

python - 现实世界的盲源分离

python - Seaborn 是否与 Anaconda 一起提供?

anaconda - 如何在 Google Colaboratory 上按 Enter 键

python - 将 RGB 颜色元组转换为十六进制字符串

python - random.sample 中使用的常数的证明

python - 使用 python/numpy 进行时间和内存高效的随机采样

scipy - 安装 MXNet 框架。在 Raspberry Pi 上 - SciPy 挂

python - 向量化 scipy.integrate.quad

python - 如何知道安装的pylab版本?