2017-10-17 10 views
1

J'ai un tableau de dimension 3x1000. En vérité, chaque colonne est ce qui est intéressant. Je veux utiliser ceci pour calculer un tableau de dimension 3x3x1000, où une dalle i est le produit externe de la colonne i du tableau original (en d'autres termes, v %*% t(v)). Existe-t-il un moyen propre de faire cela? Ci-dessous, un exemple de matrice d'entrée et de matrice de sortie, dans le cas d'une matrice 2x4.Produit externe avec R arrays

mat_in <- cbind(c(1, 2), c(3, 4), c(5, 6), c(7, 8)) 
arr_out <- array(c(1, 2, 2, 4, 9, 12, 12, 16, 25, 30, 30, 36, 49, 56, 56, 64), 
       dim = c(2, 2, 4)) 
+1

@jogo J'ai ajouté une matrice d'entrée exemple et tableau de sortie comme l'a demandé. – cgmil

Répondre

1

Cela vous donne le résultat souhaité:

mat_in <- cbind(c(1, 2), c(3, 4), c(5, 6), c(7, 8)) 
array(apply(mat_in, 2, tcrossprod), dim=c(2,2,4)) 

### test: 
arr_out <- array(c(1, 2, 2, 4, 9, 12, 12, 16, 25, 30, 30, 36, 49, 56, 56, 64), 
       dim = c(2, 2, 4)) 
arr_out - array(apply(mat_in, 2, tcrossprod), dim=c(2,2,4))