tf.linalg.pinv
| Посмотреть исходный код на GitHub |
Вычисление псевдообратной матрицы Мура-Пенроуза для одной или нескольких матриц.
tf.linalg.pinv(
a, rcond=None, validate_args=False, name=None
)
Вычисление обобщённого обратного значения матрицы с использованием её разложения по сингулярным значениям (SVD) и включением всех больших сингулярных значений.
Псевдообратная матрица A, определяется как: «матрица, которая “решает” [проблему наименьших квадратов] A @ x = b», то есть, если x_hat является решением, то A_pinv — это матрица, такая что x_hat = A_pinv @ b. Можно показать, что если U @ Sigma @ V.T = A является разложением по сингулярным значениям матрицы A, то A_pinv = V @ inv(Sigma) U^T. [(Strang, 1980)][1]
Эта функция аналогична numpy.linalg.pinv. Она отличается только значением по умолчанию параметра rcond. В numpy.linalg.pinv, значение по умолчанию rcond равно 1e-15. Здесь значение по умолчанию равно 10. * max(num_rows, num_cols) * np.finfo(dtype).eps.
| Аргументы | |
|---|---|
a |
(Массив) матрица(ы) типа float, которые необходимо псевдообратить. |
rcond |
Порог малых сингулярных значений. Сингулярные значения, меньшие (по модулю) чем rcond * largest_singular_value (опять же, по модулю) устанавливаются в ноль. Должен быть совместим с tf.shape(a)[:-2]. Значение по умолчанию: 10. * max(num_rows, num_cols) * np.finfo(a.dtype).eps |
validate_args |
Если True, в графе могут быть добавлены дополнительные проверки. Значение по умолчанию: False (т.е. дополнительные проверки графа не добавляются). |
name |
Префикс Python str, добавленный к операциям, созданным этой функцией. Значение по умолчанию: 'pinv'. |
| Возвращаемые значения | |
|---|---|
a_pinv |
(Массив) псевдообратное значение входной a. Имеет ту же форму, что и a, за исключением того, что две правые крайние размерности транспонированы. |
| Исключения | |
|---|---|
TypeError |
если входная a не имеет типа float-подобной dtype |
ValueError |
если входная a имеет менее 2 измерений. |
Примеры
import tensorflow as tf
import tensorflow_probability as tfp
a = tf.constant([[1., 0.4, 0.5],
[0.4, 0.2, 0.25],
[0.5, 0.25, 0.35]])
tf.matmul(tf.linalg..pinv(a), a)
# ==> array([[1., 0., 0.],
[0., 1., 0.],
[0., 0., 1.]], dtype=float32)
a = tf.constant([[1., 0.4, 0.5, 1.],
[0.4, 0.2, 0.25, 2.],
[0.5, 0.25, 0.35, 3.]])
tf.matmul(tf.linalg..pinv(a), a)
# ==> array([[ 0.76, 0.37, 0.21, -0.02],
[ 0.37, 0.43, -0.33, 0.02],
[ 0.21, -0.33, 0.81, 0.01],
[-0.02, 0.02, 0.01, 1. ]], dtype=float32)
Ссылки
[1]: Г. Странг. «Линейная алгебра и её приложения, 2-е изд.» Academic Press, Inc., 1980, стр. 139-142.
© 2020 The TensorFlow Authors. All rights reserved.
Licensed under the Creative Commons Attribution License 3.0.
Code samples licensed under the Apache 2.0 License.
https://www.tensorflow.org/versions/r2.4/api_docs/python/tf/linalg/pinv