2016-08-18 120 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您還沒有告訴我們),或(如果你買不起)嘗試八度...