这个问题与我之前提出的问题有关
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写为列向量,就像A
和b
的赋值一样。f
有一些矩阵运算,但它返回一个标量,optimx
也不喜欢它(它将它视为矩阵类),所以我需要做{{1} }。有没有更好的方法让我在像{Matlab这样的as.numeric()
中进行矩阵运算?
答案 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 ......