ম্যাট্রিক্সকে 1 মাত্রিক অ্যারে রূপান্তর করুন


110

আমার একটি ম্যাট্রিক্স (32X48) আছে।

আমি কীভাবে ম্যাট্রিক্সকে একক মাত্রিক অ্যারে রূপান্তর করতে পারি?

উত্তর:


214

হয় এটি 'স্ক্যান' দিয়ে পড়ুন, বা ম্যাট্রিক্সে 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

32

চেষ্টা 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

এটি একটি ভেক্টর, এবং 1-ডি অ্যারে নয়।
হ্যাডলি

হুম। সেটা সত্য. সম্ভবত কোনও 1-ডি অ্যারে নয়, তবে 1-ডি ভেক্টর।
গ্রেগ

30

যদি আমরা ডেটা.ফ্রেম সম্পর্কে কথা বলি, তবে আপনার নিজের জিজ্ঞাসা করা উচিত একই ধরণের পরিবর্তনশীল? যদি কেসটি হয় তবে আপনি র‌্যাপলি বা তালিকাভুক্তি ব্যবহার করতে পারেন, যেহেতু ডেটা.ফ্রেমগুলি তালিকাভুক্ত, তাদের আত্মার গভীরে ...

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


12

থেকে ?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
পঠন সারণী একটি ডেটা দেয়। ফ্রেম কোনও ম্যাট্রিক্স নয়। এটি এখনও as.matrix () ছাড়া কাজ করবে?
ব্র্যান্ডন বার্টেলসেন

6

এটি এত দেরিতে হতে পারে, যাইহোক এখানে ম্যাট্রিক্সকে ভেক্টরে রূপান্তর করার জন্য আমার উপায়:

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

আশা করি যে সাহায্য করবে


4

আপনি ব্যবহার করতে পারেন 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। তৃতীয়টি একটি arrayথেকে তাত্ক্ষণিকভাবে কাজ করে xএবং চতুর্থটি একযোগে ফাংশন ব্যবহার করে c()। আমি unmatrixএখান থেকে চেষ্টাও করেছি gdata, তবে এখানে উল্লেখ করা খুব ধীর।

আমি প্রাপ্ত কয়েকটি সংখ্যার ফলাফল এখানে:

> 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

ম্যাট্রিক্স সমতল করা মেশিন লার্নিংয়ের একটি সাধারণ ক্রিয়াকলাপ, যেখানে কোনও ম্যাট্রিক্স শিখার জন্য পরামিতিগুলি উপস্থাপন করতে পারে তবে জেনেরিক লাইব্রেরি থেকে একটি অপ্টিমাইজেশন অ্যালগরিদম ব্যবহার করে যা প্যারামিটারগুলির একটি ভেক্টর প্রত্যাশা করে। সুতরাং ম্যাট্রিক্স (বা ম্যাট্রিক্স) যেমন ভেক্টরে রূপান্তর করা সাধারণ is এটি স্ট্যান্ডার্ড আর ফাংশনের ক্ষেত্রে optim()


1

আপনি জোশুয়ার সমাধানটি ব্যবহার করতে পারেন তবে আমার মনে হয় আপনার প্রয়োজন Elts_int <- as.matrix(tmp_int)

বা লুপগুলির জন্য:

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 হ'ল 1 ডি ভেক্টর।


1

1 ডি অ্যারে যেহেতু সহজ এবং দ্রুত মূলত ভেক্টর

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

1

পরিবর্তে যদি আপনার কাছে এমন একটি ডেটা ফ্রেম (ডিএফ) থাকে যার একাধিক কলাম ছিল এবং আপনি ভেক্টরাইজ করতে চান তবে আপনি এটি করতে পারেন

as.matrix (df, ncol = 1)

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.