При поиске способа вычисления псевдообращений в numpy
(1.15.4) я заметил, что numpy.linalg.pinv
имеет параметр rcond
, для которого в описании указано:
rcond: (…) array_like of float
Обрезание для малых значений в единственном числе.Сингулярные значения, меньшие (по модулю), чем rcond * major_singular_value (опять же, по модулю), устанавливаются в ноль.Вещает против стека матриц
Насколько я понимаю, если rcond
- скалярное число с плавающей запятой, все записи в выводе pinv
, который был бы меньше rcond
, должны быть установлены в нольвместо этого (что было бы действительно полезно), но это не то, что происходит, например:
>>> A = np.array([[ 0., 0.3, 1., 0.],
[ 0., 0.4, -0.3, 0.],
[ 0., 1., -0.1, 0.]])
>>> np.linalg.pinv(A, rcond=1e-3)
array([[ 8.31963531e-17, -4.52584594e-17, -5.09901252e-17],
[ 1.82668420e-01, 3.39032588e-01, 8.09586439e-01],
[ 8.95805933e-01, -2.97384188e-01, -1.49788105e-01],
[ 0.00000000e+00, 0.00000000e+00, 0.00000000e+00]])
Что этот параметр на самом деле делает?И могу ли я получить только то поведение, которое на самом деле хочу, повторяя всю выходную матрицу снова?