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.
Смотрите так же:
tensordot, linalg.tensorinv, einsum


Примеры

>>> 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]])