2017-02-18 1 views
1

Dans R, I peut avoir une multiplication par morceaux entre une matrice et un (conforme) vecteur, par exemple:multiplication élément par élément entre matrice et la matrice

X <- matrix(c(1, 2, 3, 4), nrow = 2) 
a <- c(0, 1) 
X * a 

Chaque ligne de la matrice est ensuite multipliée par l'élément vectoriel correspondant. Je peux également faire la même chose pour les tableaux de dimension plus grande que 2:

XX <- array(X, dim = c(2, 2, 2)) 
a <- c(0, 1) 
XX * a 

Encore une fois chaque rangée est multipliée par l'élément de vecteur correspondant. Puis-je faire quelque chose de similaire pour un tableau 3D et une matrice 2D? Je veux juste que chaque sous-matrice du tableau soit multipliée par éléments avec une matrice.

+0

Vous pouvez trancher avec 'apply', mais il appelle' as.vector' sur les résultats de chaque tranche, détruisant les cotes. Il fait tous les calculs, donc, vous pouvez réinitialiser les dimensions (très attentivement!) Si vous le souhaitez. Une autre solution consiste à chuck chaque tranche dans une liste pour l'empêcher d'être simplifié. – alistaire

Répondre

0

vous ne pouvez pas multiplier avec la matrice 2d, mais vous pouvez essayer cette XX*c(1,2,3,4)

+0

Donc 'XX * c (X)' fonctionnerait pour cet exemple –

0

Il est possible de parvenir à une « multiplication piece'-sage (ou toute opération arithmétique, vraiment) en construisant d'abord un tableau approprié de la matrice de moindre dimension, puis exécution de l'opération par élément. Dans votre exemple:

X <- 1:8 
XX <- array(X, dim = c(2, 2, 2)) 
a <- c(0, 1) 

# construct array for point-wise operation 
expandeda <- array(a, dim=dim(XX)) 

XX * expandeda 

Le résultat de cela montre que, comme vous le dites, les éléments individuels de a sont appliqués sage ligne (c.-à-la première dimension du tableau):

, , 1 

    [,1] [,2] 
[1,] 0 0 
[2,] 2 4 

, , 2 

    [,1] [,2] 
[1,] 0 0 
[2,] 6 8 

Construire un tableau approprié en utilisant array(a, dim=dim(XX)) ne fonctionne pas seulement pour les matrices 3d et 2d mais pour toute dimensionalité des tableaux, aussi longtemps que length(a) == dim(XX)[1].