我有一个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的行1 x矩阵1的行1
1*1 + 7*4 + 13*7 + 19*10 +25*13 + 31*16 = result
然后在array1中执行matrix1的row2 x matrix1的row1
依此类推,直到array1中matrix1的第6行
然后使用matrix1的row2在array1的矩阵2上重复
这是可理解的吗?
如果可以的话,有人可以帮忙吗?
或者,是否有一种方法可以将matrix1拆分为矢量?这样我就可以得到51个独立的向量来对每个数组进行乘法运算?
问候
好的,因为我仍然不确定您是指6 x 3矩阵还是6 x 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
对数组的每个矩阵进行求解,如答案的顶部所示。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句