Python аналог функции "ktensor" от matlab - PullRequest
0 голосов
/ 22 февраля 2020

Существует ли пакет Python, который может построить тензор путем вычисления внешних произведений столбцов матрицы?

Как функция "ktensor" из matlab

https://www.tensortoolbox.org/ktensor_doc.html

Ответы [ 2 ]

0 голосов
/ 24 марта 2020

Как упоминалось в предыдущем ответе, вы можете использовать TensorLy для манипулирования тензорами, включая тензоры в форме CP («тензоры Крускала»). Модуль tensorly.kruskal_tensor обрабатывает эти конкретные операции.

Если вы хотите восстановить тензор Крускала из факторов (и необязательного вектора весов), вы можете использовать kruskal_to_tensor из TensorLy:

full_tensor = kruskal_to_tensor(kruskal_tensor)

или, что эквивалентно:

full_tensor = kruskal_to_tensor((weights, factors))

Если ваше разложение имеет ранг K, весовые коэффициенты - это вектор длины R, который содержит список факторов с столбцами R. Каждый из них

Вы также можете напрямую использовать базовые функции, такие как external-product или Khatri-Rao .

Как уже упоминалось в предыдущем ответе, если у вас есть полный тензор, вы можете применить разложение CP ( parafa c) для аппроксимации факторов.

0 голосов
/ 22 февраля 2020

Вы можете сделать это, используя функцию parafac из пакета tensorly. Из их документации :

import numpy as np
import tensorly as tl
tensor = tl.tensor([[ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.],
                    [ 0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.],
                    [ 0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.],
                    [ 0.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  1.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  1.,  1.,  1.,  1.,  0.,  0.,  0.,  0.],
                    [ 0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.,  0.]])

from tensorly.decomposition import parafac
factors = parafac(tensor, rank=2)

factors теперь содержится список матриц, образующих разложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...