2016-05-03 45 views
1

我有一个6,6,51阵列和一个51,6矩阵。我想要将矩阵1的第1行乘以矩阵中的第1行,然后将其作为结果进行存储。我想再次为阵列中包含的每个矩阵中的每一行执行此操作。所以我会把数组中的第一个矩阵的第二行乘以矩阵的第一行。一旦我遍历了数组中第一个矩阵的所有6行,我想在数组中的其余50个矩阵上做同样的事情。数组乘以矩阵中的各行

为了帮助阐述我所问的问题,我将给出一个使用6,6,3数组和3,6矩阵的简短例子。 ,我会做出一些数字,以便更容易查看:

array1 <- array(1:108, c(6,6,3)) 

[,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 7 13 19 25 31 
[2,] 2 8 14 20 26 32 
[3,] 3 9 15 21 27 33 
[4,] 4 10 16 22 28 34 
[5,] 5 11 17 23 29 35 
[6,] 6 12 18 24 30 36 

, , 2 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 37 43 49 55 61 67 
[2,] 38 44 50 56 62 68 
[3,] 39 45 51 57 63 69 
[4,] 40 46 52 58 64 70 
[5,] 41 47 53 59 65 71 
[6,] 42 48 54 60 66 72 

, , 3 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 73 79 85 91 97 103 
[2,] 74 80 86 92 98 104 
[3,] 75 81 87 93 99 105 
[4,] 76 82 88 94 100 106 
[5,] 77 83 89 95 101 107 
[6,] 78 84 90 96 102 108 

matrix1 <- matrix(1:18, nrow = 3, ncol = 6) 

    [,1] [,2] [,3] [,4] [,5] [,6] 
[1,] 1 4 7 10 13 16 
[2,] 2 5 8 11 14 17 
[3,] 3 6 9 12 15 18 

基本上我想这样做:

在矩阵1的阵列1 X ROW1矩阵1 ROW1

1*1 + 7*4 + 13*7 + 19*10 +25*13 + 31*16 = result 

然后做矩阵1的2行中的矩阵1

等等等等起来的阵列1 X ROW1直到矩阵1的6行阵列1

然后在矩阵1的矩阵2上重复使用矩阵1的行2

这是否可理解?

如果有人可以帮忙吗?

另外,有没有办法将矩阵1拆分成矢量?所以我可以得到51个独立的向量来乘以每个数组?

问候

+0

这看起来像R.如果是这样,标记它。如果不是,则用适当的语言标签标记它。 –

+0

你确定矩阵的大小?它不应该是6 x 6吗?因为如果我们有一个尺寸为6×6×51的数组,那么将会有51个矩阵为6×6。如果你的问题是正确的,你需要乘以一个6×51矩阵与6×6矩阵。 –

+1

如果Kunal Puri提出的矩阵维数为6 x 6,解决方案可能是:''apply(array1,3,function(x)rowSums(matrix1 * x))'' – Phann

回答

0

好吧,因为我仍然不知道,如果你的意思是6×3矩阵或6×6矩阵,来了这两种情况下的解决方案(类似我的评论):

Rows <- min(dim(array1)[1], dim(matrix1)[1]) 
Cols <- min(dim(array1)[2], dim(matrix1)[2]) 

apply(array1, 3, function(x) rowSums(matrix1 * x[1:Rows,1:Cols])) 

然后忽略array1的其他行和列,然后将其与matrix1不匹配。

简要说明如何到达解决方案: 取出阵列的第一个平面并尝试获得所需的解决方案。

array1[ , , 1] * matrix1 #or array1[1:Rows, 1:Cols, 1] * matrix1 

rowSums按照它的名称给出每行的总和。因此,阵列中第一个平面的结果与矩阵相乘,并总结为矢量。

rowSums(array1[1:Rows, 1:Cols, 1] * matrix1) 
# 1131 1284 1449 

结果似乎是正确的,现在我们可以apply在数组中的每个矩阵解决方案,如图答案的最顶端。