首先,请注意,该问题似乎已经存在很长时间了(例如GitHub Scipy Issue 8205)。
碰巧在尝试使用eigvalsh
或eigh
来获取大小为2000x2000或更大的复杂矩阵的特征值时,出现了MKL错误(请参见下文)(未测试其他例程)。
显然,据我所知,该问题应该在2019.0版本的MKL方面解决,所以我将Anaconda升级到2018.12-py37,因为Scipy与MKL 2019.1链接了。不幸的是,这对我不起作用,并且我仍然会收到错误消息。我错过了什么吗?或者是否有解决办法?似乎没有Scipy的MKL conda-forge版本,因此它可能是最新版本(与MKL一起在Anaconda中使用)。
Anaconda版本2018.12-py37
摘录自conda list
:
# Name Version Build Channel
blas 1.0 mkl
mkl 2019.1 144
numpy 1.15.4 py37h7e9f1db_0
numpy-base 1.15.4 py37hde5b4d6_0
scipy 1.1.0 py37h7c811a0_2
我已经建立了一个仅包含必要模块的虚拟conda环境。它会引发相同的错误。
import numpy as np
from scipy.linalg import eigvalsh
mat = np.random.rand(2000,2000) + 1j * np.random.rand(2000,2000)
mat += mat.conjugate()
eigvalsh(mat)
我收到以下错误:
Intel MKL ERROR: Parameter 12 was incorrect on entry to ZHBRDB.
它只会引发错误并返回一个只有零的数组,最后一个条目除外。