Matlab - Entrelazar matrices con futura ampliación automática

 
Vista:

Entrelazar matrices con futura ampliación automática

Publicado por Pepe (1 intervención) el 18/07/2013 14:28:59
Buenas tardes, quería preguntaros a ver si me podríais ayudar...
Tengo:
A=[1 2;6 7; 10 11];
B=[8 9;4 5; 12 13];
numero_filas=3
numero_col=2

Y quiero que me ordene de tal manera que:
C=[1 2; 8 9; 6 7; 4 5; 10 11; 12 13]

Podría hacerlo manual mente pero quiero que si cambio los datos de A o B, automáticamente me cambie la matriz C ordenandola con la misma lógica

He intentado esto pero no me sale:

for i=1:numero_filas
for j=1:numero_col
if rem(i,2)==0 %es par
C(i,j)=B(i,j)
else
C(i,j)=A(i,j)
end
end
end

Me crea una matriz de solo 3 filas.

1 2
4 5
10 11

Otra opción es:

[A_a,A_b]=size(A);
[B_a,B_b]=size(B);
w=A_a+B_a

for i=1:w
for j=1:numero_col
if rem(i,2)==0 %es par
C(i,j)=B(i,j)
else
C(i,j)=A(i,j)
end
end
end

Pero lógicamente me dice que A y B solo tienen 3 filas, no 6 columnas

Un saludo y muchas gracias
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de JOSE JEREMIAS CABALLERO
Val: 6.975
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Entrelazar matrices con futura ampliación automática

Publicado por JOSE JEREMIAS CABALLERO (5917 intervenciones) el 18/07/2013 22:13:00
1
2
3
4
5
6
7
8
9
10
11
12
13
14
clear all
A=[1 2;6 7; 10 11];B=[8 9;4 5; 12 13];
fa=size(A,1);
fb=size(B,1);
k=1; n=1;
for i=1:fa+fb
    if rem(i,2)==0
       C(i,:)=B(k,:);
       k=k+1;
    else
       C(i,:)=A(n,:);
       n=n+1;
    end
end


1
2
3
4
5
6
7
8
9
10
11
EJECUCION
>> ordenamientos_por_filas_alternado
 
C =
 
     1     2
     8     9
     6     7
     4     5
    10    11
    12    13




Saludos.
JOSE JEREMÍAS CABALLERO
Asesorías en Matlab
programador en matlab
Servicios de programación matlab
[email protected]

http://matlabcaballero.blogspot.com


http://www.lawebdelprogramador.com/foros/Matlab/1371532-FORMA_DE_APRENDER_MATLAB.html
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entrelazar matrices con futura ampliación automática

Publicado por Pepe (1 intervención) el 20/07/2013 12:40:18
Muchisimas gracias! Haceis un gran trabajo.

Un saludo!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entrelazar matrices con futura ampliación automática

Publicado por PEpe (1 intervención) el 20/07/2013 15:06:38
Perdonad de nuevo, me ha surgido una nueva duda una vez ya he realizado el entrelazado y o sabia si escribir un nuevo tema o comentarlo aquí. Necesito ordenar las filas impares de esta matriz y que una vez ordenada, en las filas pares aparezcan los valores asociados primeramente a cada termino de las filas impares

Es decir, tengo:

aux=
32 23 1
65 54 4
95 834 7
12 113 10
125 124 13
128 17 16
21 220 119
224 23 22

Y quiero

ord =

1 32 23
4 65 54
7 95 834
10 12 113
13 125 124
16 128 17
21 119 220
224 22 23

Lo he conseguido hasta la última fila, pero al hacerse el bucle en la ultima fila me ordena solo esta y el resto me la deja como en un primer principio. El código que utilicé es:

for i=1:2:8
[Y,I]=sort(aux(i,:))
ord=aux(:,I)
end

No sé por qué me resetea lo que me había colocado...

Y los resultados:

Y =

1 23 32


I =

3 2 1


ord =

1 23 32
4 54 65
7 834 95
10 113 12
13 124 125
16 17 128
119 220 21
22 23 224


Y =

7 95 834


I =

3 1 2


ord =

1 32 23
4 65 54
7 95 834
10 12 113
13 125 124
16 128 17
119 21 220
22 224 23


Y =

13 124 125


I =

3 2 1


ord =

1 23 32
4 54 65
7 834 95
10 113 12
13 124 125
16 17 128
119 220 21
22 23 224

--------HASTA AQUÍ VA PERFECTO

Y =

21 119 220


I =

1 3 2


ord =

32 1 23
65 4 54
95 7 834
12 10 113
125 13 124
128 16 17
21 119 220
224 22 23

-------AQUÍ ME ORDENA SOLO LA ULTIMA FILA IMPAR PERO EL RESTO DE IMPARES ME LAS DEJA COMO ESTABA...

muchas gracias!
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Entrelazar matrices con futura ampliación automática

Publicado por Pepe (2 intervenciones) el 22/07/2013 11:48:59
Lo solucioné, por si alguien lo necesita:

clc
clear all
aux = [32 23 1;65 54 4;95 834 7;12 113 10;125 124 13;128 17 16;21 220 119;224 23 22]
% 32 23 1
% 65 54 4
% 95 834 7
% 12 113 10
% 125 124 13
% 128 17 16
% 21 220 419
% 224 23 22
%

for i=1:2:8
[Y,I]=sort(aux(i,:))
ord(i,:)=aux(i,I)
ord(i+1,:)=aux(i+1,I)
end
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar