2016-03-25 4 views
2

В моем коде мне нужно вычислить псевдоинверсию матриц, и может случиться, что некоторые из элементов матрицы бесконечны (np.inf). Иногда функция pinv() обрабатывает ее и возвращает что-то, но иногда она просто зависает с 100% -ным использованием ЦП, и мне нужно убить процесс. См. Демонстрацию ниже:numpy.linalg.pinv() зависает для некоторых бесконечных значений (но не для других)

Python 3.4.3+ (default, Oct 14 2015, 16:03:50) 
Type "copyright", "credits" or "license" for more information. 

IPython 4.1.2 -- An enhanced Interactive Python. 
?   -> Introduction and overview of IPython's features. 
%quickref -> Quick reference. 
help  -> Python's own help system. 
object? -> Details about 'object', use 'object??' for extra details. 

In [1]: import numpy as np 
In [2]: import numpy.linalg as la 
In [3]: x = np.array([[550.0, 1], [1, np.inf]]) 
In [4]: la.pinv(x) 
Out[4]: 
array([[ 0., 0.], 
     [ 0., 0.]]) 
In [5]: x = np.array([[np.inf, np.inf], [np.inf, np.inf]]) 
In [6]: la.pinv(x) 
Out[6]: 
array([[ nan, nan], 
     [ nan, nan]]) 
In [7]: x = np.array([[550.0, 1], [np.inf, np.inf]]) 
In [8]: la.pinv(x) # here it just hung and I had to kill it from outside 
Killed 

Почему это происходит? Почему он отлично подходит для какой-либо компоновки inf, но это просто зависает для других? Может ли это быть ошибкой (т. Е. Если значения сначала будут проверены)?

+0

его нечетное, которое не виснет на противоположное либо 'x = np.array ([[np.inf, np.inf], [550.0,1]])' 'la.pinv (x) ' массив ([[nan, nan], [nan, nan]]) –

+0

также, ни один из приведенных примеров (и тот, который я сделал) не пройдет: np.allclose (x, np.dot (x , np.dot (la.pinv (x), x))) test из http://docs.scipy.org/doc/numpy-1.10.0/reference/generated/numpy.linalg.pinv.html –

ответ

1

Я открыл issue в хранилище GitHub от numpy.

Ответ заключается в том, что это ошибка в функциях BLAS/LAPACK/ATLAS и numpy (1.10.4) - это всего лишь тонкие обертки вокруг процедур из тех библиотек, которые не проверяют входные данные заранее, так как это вредит производительности.

Смежные вопросы