2010-09-29 237 views

回答

157

可以用'scan'讀入它,或者只是在矩陣上做as.vector()。如果需要按行或列,您可能需要先轉置矩陣。該解決方案發布至今都是很噁心我還沒有想嘗試...

> m=matrix(1:12,3,4) 
> m 
    [,1] [,2] [,3] [,4] 
[1,] 1 4 7 10 
[2,] 2 5 8 11 
[3,] 3 6 9 12 
> as.vector(m) 
[1] 1 2 3 4 5 6 7 8 9 10 11 12 
> as.vector(t(m)) 
[1] 1 4 7 10 2 5 8 11 3 6 9 12 
+4

這應該是被接受的解決方案,因爲問題標題清楚地表明矩陣輸入 – C8H10N4O2 2016-03-25 13:07:13

+0

轉置矩陣是天才! – LostLin 2017-12-21 20:49:35

9

?matrix:「矩陣是二維'數組'的特例。」你可以簡單地改變矩陣/數組的尺寸。

Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted 
dim(Elts_int) <- (maxrow_int*maxcol_int,1) 
+1

閱讀表返回一個data.frame不是矩陣。如果沒有as.matrix(),這仍然可以工作嗎? – 2010-09-29 16:16:18

+0

@Brandon不會的;接得好! – 2010-09-29 16:21:37

1

您可以使用約書亞的解決方案,但我認爲你需要Elts_int <- as.matrix(tmp_int)

或者for循環:

z <- 1 ## Initialize 
counter <- 1 ## Initialize 
for(y in 1:48) { ## Assuming 48 columns otherwise, swap 48 and 32 
for (x in 1:32) { 
z[counter] <- tmp_int[x,y] 
counter <- 1 + counter 
} 
} 

z是一維向量。

27

如果我們談論data.frame,那麼你應該問自己是同一類型的變量?如果是這樣的話,你可以rapply,或選擇不公開使用,因爲data.frames的名單,在他們的靈魂深處......

data(mtcars) 
unlist(mtcars) 
rapply(mtcars, c) # completely stupid and pointless, and slower 
+0

'unlist'爲我工作。 – 2017-03-05 08:05:08

23

嘗試c()

x = matrix(1:9, ncol = 3) 

x 
    [,1] [,2] [,3] 
[1,] 1 4 7 
[2,] 2 5 8 
[3,] 3 6 9 

c(x) 

[1] 1 2 3 4 5 6 7 8 9 
+0

這是一個向量,而不是一維數組。 – hadley 2010-09-29 20:35:25

+0

嗯。確實如此。也許不是一維數組,而是一維矢量。 – Greg 2010-09-29 21:59:37

10

array(A)array(t(A))會給你一個一維數組。

1

簡單和快速,因爲一維數組本質上是一個矢量

vector <- array[1:length(array)] 
5

它可能是這麼晚了,反正這是我在矩陣轉換爲矢量方式:

library(gdata) 
vector_data<- unmatrix(yourdata,byrow=T)) 

希望這將有助於

1

如果你有一個data.frame(df)有多個列,並且你想要矢量化,你可以做

as.matrix(df,ncol = 1)

+0

這也適用於矩陣。 – 2017-01-25 15:11:28

1

您可以使用as.vector()。它看起來是根據我的小基準最快方法,如下所示:

library(microbenchmark) 
x=matrix(runif(1e4),100,100) # generate a 100x100 matrix 
microbenchmark(y<-as.vector(x),y<-x[1:length(x)],y<-array(x),y<-c(x),times=1e4) 

第一解決方案使用as.vector(),第二個使用的是一個矩陣被存儲在存儲器中的連續的陣列和length(m)給出了這樣的事實矩陣中元素的數量m。第三個從x實例化array,第四個使用連接函數c()。我也嘗試unmatrixgdata,但它太慢,不能在這裏提到。

這裏有一些我所獲得的數值結果:

> microbenchmark(
     y<-as.vector(x), 
     y<-x[1:length(x)], 
     y<-array(x), 
     y<-c(x), 
     times=1e4) 

Unit: microseconds 
       expr min  lq  mean median  uq  max neval 
    y <- as.vector(x) 8.251 13.1640 29.02656 14.4865 15.7900 69933.707 10000 
y <- x[1:length(x)] 59.709 70.8865 97.45981 73.5775 77.0910 75042.933 10000 
     y <- array(x) 9.940 15.8895 26.24500 17.2330 18.4705 2106.090 10000 
      y <- c(x) 22.406 33.8815 47.74805 40.7300 45.5955 1622.115 10000 

平展矩陣在機器學習,共同操作,其中一個矩陣可以代表參數來學習,但一個從一個普通的採用優化算法庫期望一個參數向量。所以通常將矩陣(或矩陣)轉換成這樣的向量。標準R功能optim()就是這種情況。