2016-08-18 90 views
-1

这个问题是涉及到一个问题,我之前更好库矩阵运算

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也不喜欢那个(它把它当作矩阵类),所以我需要做as.numeric()

有没有更好的方法来让我在像Matlab这样的R中做矩阵运算?

+2

我不确定这是否有帮助,但可以使用'return(v [1])'而不是'return(as.numeric(v))'将标量值拉出R中放入的1x1矩阵。 – Austin

+2

英语使用说明(对不起):“我觉得做...很痛苦”或者“我觉得做一些手术很痛苦”会比“我感到痛苦”更习惯...... –

+0

我是新来的,对于投票给我的人,你能说出理由吗?谢谢 – hxd1011

回答

3

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

  • c(v)drop(v)有同样的效果as.numeric(v); c(v)是更简洁和drop(v)是(可能)更清晰语义
  • optim()(不像optimx::optimx)不抱怨被切换的列向量(在R项中,1列的矩阵),并且其工作方式相同的例子
  • crossprod(e)相当于(和速度比)t(e) %*% e

可以使用MATLAB(为什么你用R您还没有告诉我们),或(如果你买不起)尝试八度...