Тензорная декомпозиция двухстороннего массива

#r #tensor #decomposition

#r #тензорный #декомпозиция

Вопрос:

Я могу использовать rTensor::cp для декомпозиции 3-стороннего массива в R . Однако при декомпозиции двухстороннего массива могла бы возникнуть ошибка L[[i]] : subscript out of bounds . Как декомпозировать двухсторонний массив? Спасибо.

cp хорошо работает для трехпозиционного массива.

 library(rTensor)
a <- c(0.1,0.9)
b <- c(0.5,0.5)
c <- c(0.7,0.3)
tnsr <- as.tensor(outer(outer(a,b),c))
cpD <- cp(tnsr, num_components=1)

> $U[[1]]
>      [,1]
> [1,]  0.1
> [2,]  0.9

> $U[[2]]
>      [,1]
> [1,] -0.5
> [2,] -0.5

> $U[[3]]
>      [,1]
> [1,] -0.7
> [2,] -0.3
  

Для двухстороннего массива возникает ошибка.

 tnsr <- as.tensor(outer(a,b))
cpD <- cp(tnsr, num_components=1)

> Error in L[[i]] : subscript out of bounds
  

Комментарии:

1. Я понял, что для этой задачи было бы достаточно обычного PCA.

Ответ №1:

Одним из обходных путей является умножение двухпозиционного массива на 1, чтобы сделать его трехпозиционным массивом.

 tnsr = as.tensor(outer(outer(a,b),1))
cpD = cp(tnsr, num_components=1)

> $U[[1]]
>      [,1]
> [1,]  0.1
> [2,]  0.9

> $U[[2]]
>      [,1]
> [1,] -0.5
> [2,] -0.5

> $U[[3]]
>      [,1]
> [1,]   -1