numpy.linalg.tensorsolve
numpy.linalg.tensorsolve(a, b, axes=None)
Функция linalg.tensorsolve() решает линейное тензорное уравнение \(ax = b\), где a и b - тензоры.
-
- a - массив NumPy или подобнй массиву объект.
-
Тензор коэфициентов. Форма данного тензора должна удовлетворять условию
a.shape = b.shape + Q
, где Q - это кортеж, длина которого равна величине последнего индекса в кортежеb.shape
, аnp.prod(Q) = np.prod(b.shape)
. Если данные условия для формы тензора a выполняются, то его можно считать "квадратным" по отношению к тензору b. - b - массив NumPy или подобнй массиву объект.
- Тензор свободных членов, который может быть любой формы.
- axes - кортеж целых чисел (необязательный параметр).
- Определяет оси массива a, которые используются для переупорядочивания в в правом направлении индексов. По умолчанию None, что соответствует отсутствию переупорядочивания.
-
- x - массив NumPy
- Решение линейного тензорного уравнения с формой - тензор, форма которого равна Q.
Примеры
>>> import numpy as np
>>> from numpy import linalg as LA
>>>
>>> a = np.random.randint(0, 10, size = (3, 2, 2, 3))
>>> a
array([[[[9, 7, 3],
[5, 7, 1]],
[[3, 7, 2],
[0, 3, 4]]],
[[[1, 3, 5],
[7, 4, 9]],
[[4, 0, 9],
[8, 7, 9]]],
[[[2, 5, 7],
[3, 5, 7]],
[[2, 0, 9],
[0, 1, 3]]]])
>>>
>>> b = np.random.randint(0, 10, size = (3, 2))
>>> b
array([[5, 7],
[8, 4],
[0, 8]])
>>>
>>> x = LA.tensorsolve(a, b)
>>> x
array([[ 4.03713647, 0.06308725, -0.2941387 ],
[ 0.36608501, -5.03722595, 2.53673378]])
>>>
>>> np.tensordot(a, x)
array([[5., 7.],
[8., 4.],
[0., 8.]])
>>>
>>> np.allclose(np.tensordot(a, x), b)
True
Параметр axes
позволяет переопределить положение элементов тензора a для указанных осей:
>>> a = np.random.randint(0, 10, size = (3, 2, 2, 3))
>>> b = np.random.randint(0, 10, size = (3, 2))
>>> x_0 = LA.tensorsolve(a, b, axes = (0, 1))
>>>
>>> x_0.shape
(3, 2)
>>>
>>> np.tensordot(a.reshape(3, 2, 3, 2), x_0, axes = [[0,1], [0, 1]])
array([[4., 0.],
[7., 9.],
[9., 6.]])
>>>
>>> b
array([[4, 0],
[7, 9],
[9, 6]])