Tôi có ma trận (32X48).Chuyển đổi ma trận thành mảng 1 chiều
Làm cách nào để chuyển ma trận thành mảng một chiều?
Tôi có ma trận (32X48).Chuyển đổi ma trận thành mảng 1 chiều
Làm cách nào để chuyển ma trận thành mảng một chiều?
Hoặc đọc bằng 'quét' hoặc chỉ thực hiện thao tác as.vector() trên ma trận. Bạn có thể muốn chuyển đổi ma trận đầu tiên nếu bạn muốn nó theo hàng hoặc cột. Các giải pháp được đăng cho đến nay rất tổng Tôi thậm chí không đi để thử chúng ...
> 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
Từ ?matrix
: "Ma trận là trường hợp đặc biệt của mảng hai chiều". Bạn chỉ có thể thay đổi kích thước của ma trận/mảng.
Elts_int <- as.matrix(tmp_int) # read.table returns a data.frame as Brandon noted
dim(Elts_int) <- (maxrow_int*maxcol_int,1)
Đọc bảng trả về dữ liệu.không phải là ma trận. Điều này vẫn sẽ làm việc mà không có as.matrix()? –
@ Brandon không có nó sẽ không; nắm bắt tốt! –
Bạn có thể sử dụng giải pháp của Giô-suê nhưng tôi nghĩ rằng bạn cần Elts_int <- as.matrix(tmp_int)
Hoặc cho vòng:
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 là một vector 1d.
Nếu chúng ta đang nói về data.frame, sau đó bạn nên tự hỏi mình là các biến cùng loại? Nếu đó là trường hợp, bạn có thể sử dụng rapply, hoặc không công khai, vì data.frames là danh sách, trong sâu thẳm trong tâm hồn họ ...
data(mtcars)
unlist(mtcars)
rapply(mtcars, c) # completely stupid and pointless, and slower
'unlist' làm việc cho tôi. –
array(A)
hoặc array(t(A))
sẽ cung cấp cho bạn mảng 1-d.
đơn giản và nhanh chóng kể từ khi một mảng 1d về cơ bản là một vector
vector <- array[1:length(array)]
Nó có thể là quá muộn, dù sao đây là cách của tôi trong việc chuyển đổi Matrix để vector:
library(gdata)
vector_data<- unmatrix(yourdata,byrow=T))
hy vọng rằng sẽ giúp
Nếu thay vào đó bạn có data.frame (df) có nhiều cột và bạn muốn vector hóa, bạn có thể làm
as.matrix (df, ncol = 1)
Điều này cũng sẽ làm việc cho một ma trận. –
bạn có thể sử dụng as.vector()
. Có vẻ như nó là phương pháp nhanh nhất theo chuẩn nhỏ của tôi, như sau:
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)
Các giải pháp đầu tiên sử dụng as.vector()
, thứ hai sử dụng thực tế là một ma trận được lưu giữ như một mảng kề nhau trong bộ nhớ và length(m)
cung cấp cho các số phần tử trong ma trận m
. Giá trị thứ ba khởi tạo một array
từ x
và thiết bị thứ tư sử dụng chức năng ghép nối c()
. Tôi cũng đã thử unmatrix
từ gdata
, nhưng quá chậm để được đề cập ở đây.
Dưới đây là một số kết quả số tôi đắc:
> 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
cầu dẹt một ma trận là một hoạt động phổ biến ở Machine Learning, nơi một ma trận có thể biểu diễn các thông số để tìm hiểu nhưng có ai sử dụng một thuật toán tối ưu hóa từ một generic thư viện dự kiến một vectơ tham số. Vì vậy, nó là phổ biến để biến đổi ma trận (hoặc ma trận) thành một vectơ như vậy. Đó là trường hợp với hàm R tiêu chuẩn optim()
.
Đây phải là giải pháp được chấp nhận, vì tiêu đề câu hỏi cho biết rõ ràng đầu vào ma trận – C8H10N4O2
transposing ma trận là thiên tài! – LostLin