В моем коде мне нужно вычислить псевдоинверсию матриц, и может случиться, что некоторые из элементов матрицы бесконечны (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
, но это просто зависает для других? Может ли это быть ошибкой (т. Е. Если значения сначала будут проверены)?
его нечетное, которое не виснет на противоположное либо 'x = np.array ([[np.inf, np.inf], [550.0,1]])' 'la.pinv (x) ' массив ([[nan, nan], [nan, nan]]) –
также, ни один из приведенных примеров (и тот, который я сделал) не пройдет: 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 –