【问题标题】:Array multiplied by individual rows in matrix数组乘以矩阵中的各个行
【发布时间】:2016-05-03 11:31:53
【问题描述】:

我有一个 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

基本上我想这样做:

array1 中矩阵 1 的第 1 行 x 矩阵 1 的第 1 行

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

然后在矩阵1的array1 x row1中执行matrix1的row2

等直到array1中matrix1的第6行

然后使用 matrix1 的 row2 在 array1 的矩阵 2 上重复

这可以理解吗?

如果可以,有人可以帮忙吗?

或者,有没有办法将 matrix1 拆分为向量?所以我可以得到 51 个单独的向量来与每个数组相乘?

问候

【问题讨论】:

  • 这看起来像 R。如果是这样,就这样标记它。如果没有,请使用适当的语言标签对其进行标记。
  • 你确定矩阵的大小吗?不应该是 6 x 6 吗?因为如果我们有一个维度为 6 x 6 x 51 的数组,那么将有 51 个 6 x 6 的矩阵。如果您的问题是正确的,您要求将 6 x 51 矩阵与 6 x 6 矩阵相乘。跨度>
  • 如果矩阵维度是 Kunal Puri 建议的 6 x 6,则解决方案可能是:apply(array1, 3, function(x) rowSums(matrix1 * x))
  • 想象一下,我将矩阵(6,51 矩阵)分割成 51 个单独的向量,然后将数组中每个矩阵的每一行乘以第 i 个向量并为所有数组中的矩阵。

标签: arrays r matrix multiplication


【解决方案1】:

好的,因为我仍然不确定您是指 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]))

然后将忽略不适合 matrix1array1 的其他行和列。

如何获得解决方案的简短说明: 取阵列的第一个平面并进行实验以获得所需的解决方案。

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

rowSums 正如其名称所预期的那样,给出每行的总和。所以数组中第一个平面乘以矩阵并汇总的结果是一个向量。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-18
    • 1970-01-01
    • 1970-01-01
    • 2023-01-04
    相关资源
    最近更新 更多