Eu tenho uma matriz (32X48).
Como posso converter a matriz em um array unidimensional?
Leia com 'scan' ou apenas faça as.vector () na matriz. Você pode querer transpor a matriz primeiro, se quiser por linhas ou colunas.
> 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
experimentar 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
Se estamos falando sobre data.frame, você deve se perguntar se as variáveis são do mesmo tipo? Se for esse o caso, você pode usar rapply, ou unlist, já que data.frames são listas, no fundo de suas almas ...
fonte
array(A)
ouarray(t(A))
fornecerá uma matriz 1-d.fonte
De
?matrix
: "Uma matriz é o caso especial de uma 'matriz' bidimensional." Você pode simplesmente alterar as dimensões da matriz / matriz.fonte
Pode ser tão tarde, de qualquer maneira, aqui está minha maneira de converter Matrix em vetor:
espero que ajude
fonte
você pode usar
as.vector()
. Parece que é o método mais rápido de acordo com meu pequeno benchmark, da seguinte maneira:A primeira solução usa
as.vector()
, a segunda usa o fato de que uma matriz é armazenada como um array contíguo na memória elength(m)
fornece o número de elementos em uma matrizm
. O terceiro instancia umarray
dex
e o quarto usa a função concatenarc()
. Eu também tenteiunmatrix
a partirgdata
, mas é muito lento para ser mencionado aqui.Aqui estão alguns dos resultados numéricos que obtive:
O achatamento de uma matriz é uma operação comum em Aprendizado de Máquina, onde uma matriz pode representar os parâmetros a serem aprendidos, mas se usa um algoritmo de otimização de uma biblioteca genérica que espera um vetor de parâmetros. Portanto, é comum transformar a matriz (ou matrizes) em tal vetor. É o caso da função R padrão
optim()
.fonte
Você pode usar a solução de Joshua, mas acho que você precisa
Elts_int <- as.matrix(tmp_int)
Ou loops:
z é um vetor 1d.
fonte
Simples e rápido, pois uma matriz 1d é essencialmente um vetor
fonte
Se, em vez disso, você tiver um data.frame (df) com várias colunas e quiser vetorizar, pode
as.matriz (df, ncol = 1)
fonte