[matlab] Criação de ciclo para novo vector

Helixsk8

I quit My Job for Folding
Boas pessoal
Estou aqui preso num problema um bocado "chatinho" que me está a atrasar um projecto todo.
A questão é a seguinte.

Chego a um vector
x(x1,x2,x3,x4....xn)

A ideia seria substituir este vector com a seguinte configuração...

x(x1,x2,x2,x3,x3,x4,x4,...,xn,xn) Já tive a tentar com ciclo o problema é que ao correr a primeira vez substitui logo a segunda posição de X sendo os resultados seguintes todos errados.

Estava a tentar fazer isto sem vector auxiliar...

Alguma ideia?

Obrigado
 
usa um vector auxiliar, isso não aumenta o tempo de computação.

uma forma de fazer...
Código:
x1=[1,2,3,4,5];
x=[1];
a=2
for i=2:2:(2*length(x1)-1)
    x(i)=x1(a);
    x(i+1)=x1(a);
    a=a+1;
end
x
outra forma
Código:
x1=[1,2,3,4,5];
x=[1];
for i=1:(length(x1)-1)
    x(2*i)=x1(i+1);
    x(2*i+1)=x1(i+1);   
end
x
E o resultado obtido de ambas a formas.
Código:
x = 1     2     2     3     3     4     4     5     5
assim de repente sem vector auxiliar não tou a ver.



edit: só um pequeno reparo, no codigo que meti antes, substitui o x=[1] por x=ones(1,2*length(x1)-1).
A pre alocação aumenta a velocidade de computação dos ciclos no matlab.

Por exemplo num vector x1 de 9000 elementos o tempo de computação sem pre alocação é de 2,5 segundos +/- e com prealocação é menos de 0.01 s.
 
Última edição:
Experimenta uma coisa deste género:

Código:
A = [1 2 3 4 5 6 7 8 9];
Ax = repmat(A,2,1);
Ax = reshape(Ax,1,prod(size(Ax)));

o resultado seria:

Código:
Ax = [1 1 2 2 3 3 4 4 5 5 6 6 7 7 8 8 9 9]

Edit: Reparei agora que só queres o primeiro valor uma vez, para isso basta acrescentar a seguinte linha:

Código:
Ax = Ax(2:end);

Edit #2: Este é um daqueles casos em que vectorizar o código nao ajuda. O meu método é mais lento do que o código do alakazan, especialmente para quantidades de dados mais pequenas. De qualquer modo, este tipo de "truques" com as funçoes repmat, reshape, bsxfun e permute podem poupar-te muito tempo em operaçoes que sejam consideravelmente mais complicadas.
 
Última edição:
Back
Topo