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

5 投票
2 回答
7534 浏览
提问于 2025-04-18 09:29

我在程序中多次使用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

2 个回答

3

这个错误

Intel MKL 错误:在进入 DELSD 时,第4个参数不正确

出现这个错误是因为你的输入中有 Nan(不是一个数字)或 Inf(无穷大)的值。请检查一下你的数据,确保没有这些值。

2

如果一个函数决定直接把错误信息打印到标准输出(stdout)或标准错误(stderr),而不使用正常的Python错误报告机制(也就是异常处理和警告),那么你几乎无能为力去阻止它。如果这让你很烦,你可以选择完全不让它写入标准错误。关于如何临时做到这一点(比如只针对这个函数),在另一个StackOverflow的问题中有解决方案:抑制Python函数的标准输出/标准错误打印。显然,如果你这么做了,你也会错过这个函数的所有相关输出,所以要小心使用。

撰写回答