Numpy / Polyfit - 抑制Intel MKL错误信息的打印

5
我在程序中多次计算 polyfit,其中一些输入是 np.nan,这会导致算法出现问题。我知道这一点,在此应用中我不关心它。
当出现问题时,会在控制台上打印以下内容: Intel MKL ERROR: Parameter 4 was incorrect on entry to DELSD. 我只想要抑制这个错误。我已经尝试过:
import warnings
warnings.simplefilter('ignore', np.RankWarning)
warnings.simplefilter('ignore', np.ComplexWarning)
warnings.filterwarnings('ignore', "Intel MKL ERROR")

这会抑制一些警告,但无法抑制Intel MKL的警告。我只想防止它在控制台中打印(因为它会打断我正在打印的其他状态消息)。

以下内容应该会触发问题:

import numpy as np
def line_fit(R, X):
    num_rows = np.shape(R)[0]
    p = np.zeros(num_rows)
    for i in range(num_rows):
        temp = np.polyfit(R[i, :], X[i, :], 1)
        p[i] = temp[1]
    return p
temp = np.array((((198.652-76.1781j),(132.614-43.8134j),(115.042-41.2485j),(91.7754-39.1649j),(78.8538-37.389j),(67.8769-34.6342j)),
((np.nan),(1671.79-796.522j),(1206.44-824.202j),(654.572-682.673j),(438.175-559.025j),(303.624-452.122j)),
((np.nan-1j*np.nan),(1671.32-794.931j),(1198.71-803.533j),(649.574-624.276j),(443.286-530.36j),(308.609-438.738j))))
R = np.real(temp)
X = np.imag(temp)
coeff = line_fit(R, X)

Python 2.7.6(默认,2013年11月10日,19:24:24)[MSC v.1500 64位(AMD64)],NumPy 1.8.0

的意思是:使用64位(AMD64)的MSC编译器,安装了Python 2.7.6和NumPy 1.8.0版本。


我假设你正在使用从http://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy链接的MKL-linked numpy? - MattDMo
我想是这样。不确定是否有检查的方法(numpy.__version__没有提示),我正在使用WinPython,而且我没有自己编译任何东西。 - schodge
我在我的Ubuntu 12.10上,使用Python 2.7.3和Numpy 1.8.0编译的GCC运行了你的示例代码,并且错误信息更加清晰了一些:"ValueError: On entry to DLASCL parameter number 4 had an illegal value" -- 希望这能对你有所帮助。 - Louis
谢谢。显然不喜欢nan。我刚试过warnings.simplefilter('ignore', ValueError),但它并没有抑制它。一定有办法防止东西被写入控制台...? - schodge
在我按照这里的解决方案操作后,Intel MKL错误不再出现了。 - Spirit of the Void
2个回答

3

当您的输入中存在NaN或Inf值时,会出现错误:

Intel MKL ERROR:在进入DELSD时,参数4不正确

请检查并填充它。


2

如果一个函数决定直接将错误消息打印到stdout/stderr,而不使用正常的Python错误报告机制(即异常处理和警告),那么你几乎无法阻止它这样做。如果这真的让你很烦恼,你可以显然完全抑制写入stderr。在另一个SO问题中有一个解决方案,可以临时解决如何做到这一点(例如仅针对此函数):Suppress stdout / stderr print from Python functions。显然,如果你这样做,你也会错过这个函数的所有相关输出,所以请谨慎使用。


我尝试了其他SO问题中提出的建议解决方案,但没有成功。我仍然收到错误信息。 - Kel Solaar

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接