【问题标题】:Matrix Multiplication for loop of n number of monthsn个月循环的矩阵乘法
【发布时间】:2018-05-25 17:44:54
【问题描述】:

我有一个链格式的矩阵乘法问题。 我只有一个输入矩阵 A,将保存矩阵 B

A * B = C
B * C = D
C * D = E
D * E = F

这个乘法链一直持续到 18 个月。 我试过下面的代码:但无法选择我应该去哪个循环。

矩阵A:

2   3
4   2

代码:

a = matrix( c(2, 3, 4, 2), nrow=2, ncol=2, byrow = TRUE) 
a

b <- a
b

c = b %*% a
c

d <- c %*% b
d

e <- d %*% c
e

我手动做这个乘法直到,我想以链循环的方式做 18 次。

预期输出:

一个

      [,1] [,2]
[1,]    2    3
[2,]    4    2

b

      [,1] [,2]
[1,]    2    3
[2,]    4    2

c = b %*% a

c

      [,1] [,2]
[1,]   16   12
[2,]   16   16

d

d

     [,1] [,2]
[1,]   80   72
[2,]   96   80

e

e

     [,1] [,2]
[1,] 2432 2112
[2,] 2816 2432

所以这应该重复 18 次。请帮忙。提前致谢。

【问题讨论】:

  • 怎么样Reduce('%*%', mget(letters[1:5]), accumulate = TRUE)
  • 你需要18次后直接得到答案还是你还需要中间步骤作为矩阵?
  • @akrun 我尝试使用您的代码:我只确定字母 A 和 B,因此这不起作用。它应该在循环中。
  • @Ronak,所有乘法的直接答案。这意味着 18 个矩阵。
  • 您可能需要c &lt;- d &lt;-e &lt;- matrix(1, 2, 2)

标签: r loops matrix


【解决方案1】:

从第 12 次循环开始,乘法结果为 Inf,因为值变得太大而无法存储在 R 中。

以下代码会将值存储在列表 matmull 中。它的前 2 个元素是原始值 A 和 B。从第 3 个元素开始,它在循环中具有乘法结果

A <- matrix(c(2L, 4L, 3L, 2L), 2, 2)
matmull <- rep(list(A), 20)
for(i in 1:18){
 matmull[[i+2]] <- matmull[[i]]%*%matmull[[i+1]]
}

【讨论】:

  • 感谢您的帮助和解释。
  • 2L, 4L, 3L, 2L 是矩阵较小时较大的值。但是,当矩阵大于 12*12 或 18*18 时,并且从 .csv 读取该矩阵时,就会产生问题。是否有任何通用代码来处理这种情况。
  • 我没有明白你的意思,但我假设你在 csv 文件中写入 2L、4L、3L、2L,然后尝试读取它。 2L, 4L... 形式是告诉 R 这些是整数的方式,因此将比数字使用更少的内存。您可以改用 2, 4, 3, 2,它会正常工作。在 csv 中你应该写成 2, 4, 3, 2 read.csv 默认会被读取为数字。
【解决方案2】:

for 循环在这里会有所帮助

matA <- matrix(c(2,4,3,2), ncol=2,nrow=2)
output_var<- array(dim=c(2,2,18))
output_var[,,c(1:2)] <- matA
for (i in c(3:18))
{
  output_var[,,i] <- output_var[,,(i-1)]%*% output_var[,,(i-2)]
}
output_var

【讨论】:

  • 我假设您想要存储和使用每个月获得的(中间)值。
  • 感谢 Ganesh 的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-11-13
  • 2020-07-18
  • 2018-05-25
  • 1970-01-01
  • 1970-01-01
  • 2012-11-14
  • 1970-01-01
相关资源
最近更新 更多