【问题标题】:vector-matrix multiplication in rr中的向量矩阵乘法
【发布时间】:2015-08-25 08:45:12
【问题描述】:

我想将 1000 个随机变量乘以一个矩阵,从而得到 1000 个不同的结果矩阵。

我正在运行以下代码:

Threshold <- runif(1000,min=0,max=1)    #Generating 1000 random variables so that we can see 1000 multiple results of Burstscore
Burstscore <- matrix(data=0,nrow=nrow(Fm2),ncol=ncol(Fpre2))
#Calculating the final burst score
for (i in 1:nrow(Fm2)){
  for (j in 1:ncol(Fpre)){    #Dimentions of all the matrices    (Fpre,Fm,Growth,TD,Burstscore) are 432,24  
{
  Burstscore[i,j]= ((as.numeric(Threshold))*(as.numeric(Growth[i,j]))) + ((1-(as.numeric(Threshold)))*(as.numeric(TD[i,j])))
}
  }
}

我收到以下错误 -

'Error in Burstscore[i, j] = ((as.numeric(Threshold)) * (as.numeric(Growth[i,  : 
  number of items to replace is not a multiple of replacement length'

【问题讨论】:

  • 不可重现,我们无权访问Fm2 对象。
  • @Pascal 我们愿意。方程中的其他两个矩阵直接取决于 Fm 和 Fpre 变量。这些变量早先在代码中使用并且具有相同的维度。
  • 我们 = 潜在的帮助者。
  • @Pascal 哦,我明白了。对不起。但这里的主要问题是我如何运行这个循环,以便它返回 1000 个结果矩阵。
  • 是的,我明白了。但是当问一个关于 SO 的问题时,你被要求提供一个最小的可重现的例子。这有助于了解上下文、您使用的数据格式以及您想要获得的数据。

标签: r matrix vector


【解决方案1】:

您正在尝试将 Burstscore 矩阵的一个单元格放入 1000 个值(因为您将每个 [i,j] 乘以整个“阈值”向量)。除此之外,您的代码还包含不必要的元素(括号或as.numeric() 语句)。而且,当然,如上所述,它不是完全可重现的,我不得不“发明”几个矩阵。

你想要做的事情如下:

Threshold <- runif(1000,min=0,max=1)
Growth <- matrix(runif(432*24), ncol=24)

Burstscore <- vector("list", length(Threshold))
for (i in 1:length(Threshold)) {
    Burstscore[[i]]= (Threshold[i]*Growth) + ((1-Threshold[i])*TD)
}

在 R 中,使用lapply() 函数会更加优雅:

Burstscore <- lapply(Threshold, function(x) (x*Growth)+((1-x)*TD))

最后,我建议您也为您的问题设置一个更有意义的标题,这样它也可能对其他人有所帮助。

【讨论】:

  • 没错!我想要 1000 个矩阵作为我的结果。提前致谢:)
猜你喜欢
  • 2020-01-17
  • 1970-01-01
  • 2016-12-25
  • 2020-03-16
  • 2020-10-29
  • 1970-01-01
  • 1970-01-01
  • 2017-11-05
相关资源
最近更新 更多