Convert a matrix to a 1 dimensional array

后端 未结 10 1471
忘了有多久
忘了有多久 2020-11-27 14:45

I have a matrix (32X48).

How can I convert the matrix into a single dimensional array?

相关标签:
10条回答
  • 2020-11-27 15:28

    you can use as.vector(). It looks like it is the fastest method according to my little benchmark, as follows:

    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)
    

    The first solution uses as.vector(), the second uses the fact that a matrix is stored as a contiguous array in memory and length(m) gives the number of elements in a matrix m. The third instantiates an array from x, and the fourth uses the concatenate function c(). I also tried unmatrix from gdata, but it's too slow to be mentioned here.

    Here are some of the numerical results I obtained:

    > 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
    

    Flattening a matrix is a common operation in Machine Learning, where a matrix can represent the parameters to learn but one uses an optimization algorithm from a generic library which expects a vector of parameters. So it is common to transform the matrix (or matrices) into such a vector. It's the case with the standard R function optim().

    0 讨论(0)
  • 2020-11-27 15:28

    Simple and fast since a 1d array is essentially a vector

    vector <- array[1:length(array)]
    
    0 讨论(0)
  • 2020-11-27 15:28

    If you instead had a data.frame (df) that had multiple columns and you want to vectorize you can do

    as.matrix(df, ncol=1)

    0 讨论(0)
  • 2020-11-27 15:32

    array(A) or array(t(A)) will give you a 1-d array.

    0 讨论(0)
提交回复
热议问题