R中更好的库用于矩阵运算

时间:2016-08-18 21:01:04

标签: r matlab matrix

这个问题与我之前提出的问题有关

Matrix and vector multiplication operation in R

具体来说,在R中进行一些矩阵运算我感到很痛苦。例如,对于以下代码,我可以通过几个额外的步骤来运行它。

f<-function(x,A,b){
  e=A %*% x - b
  v=t(e) %*% e
  return(as.numeric(v))
}

A=matrix(runif(300),ncol=3)
b=matrix(runif(100),ncol=1)
x0=runif(3)

optimx::optimx(x0,f,A=A,b=b, method="BFGS")
  • optimx只接受一个向量作为初始值,因此我不能将x0写为列向量,就像Ab的赋值一样。
  • 我的函数f有一些矩阵运算,但它返回一个标量,optimx也不喜欢它(它将它视为矩阵类),所以我需要做{{1} }。

有没有更好的方法让我在像{Matlab这样的as.numeric()中进行矩阵运算?

1 个答案:

答案 0 :(得分:3)

我并不乐观,你会找到你想要的东西,并试图解决一种语言的习语 - 而不是吮吸它/适应它 - 往往是一个配方持续的痛苦。一些想法:

  • c(v)drop(v)具有相同的效果as.numeric(v); c(v)更为简洁,drop(v)(或许)语义更清晰
  • optim()(与optimx::optimx不同)并不抱怨传递列向量(以R术语表示,1列矩阵),并且与您的示例中的工作方式相同
  • crossprod(e)相当于(并且快于)t(e) %*% e

可以使用MATLAB(你还没告诉我们你为什么要使用R),或者(如果你买不起)试试Octave ......