Matlab - Determinar si varios vectores son iguales

   
Vista:
Imágen de perfil de Ricardo

Determinar si varios vectores son iguales

Publicado por Ricardo (42 intervenciones) el 30/03/2017 23:57:46
Buen dia, por favor una pequeña consulta
Tengo la siguiente matriz
a=[1 6 1 6 1 6
3 5 3 2 3 5
3 2 3 6 6 1
3 3 3 2 3 2
3 6 3 6 1 1]
necesito de alguna manera comparar los elementos fila a fila, pero agrupados de 2 en 2, es decir por ejemplo para la 1 fila comparar [1,6] [1,6] [1,6] o para la segunda fila [3,5] [3,2] [3,5] y que me diga cuales "submatrices" son iguales, obviamente viendo sabria que para la primera fila las 3 "submatrices" son iguales o que para la 2 fila la primera y tercera "submatrices" son iguales, pero necesito replicar este procedimiento en matrices muchos mas grandes (casi de tamaño 50x50)

Y si no es mucha molestia, una vez identificada las submatrices que sean iguales,poder cambiar alguno de sus elementos para que ninguna de las "submatrices" sea igual.
Es decir, por ejemplo que para la primera fila al final tenga [1,6] [2,6] [1,5] o para la segunda fila [3.5] [3,2] [4,5] es decir que cambie su valor para que no se replique

Muchas gracias a todos por su colaboracion :D
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 Ricardo

Determinar si varios vectores son iguales

Publicado por Ricardo (42 intervenciones) el 31/03/2017 00:18:44
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
clc
clear
num_pisos=3;
num_vanos=3;
lim_filas=[1,num_pisos];
lim_columnas=[1,num_vanos*2];
posicion=[1,6,1,8,1,7;3,5,7,2,3,5;5,2,6,6,6,1;7,3,5,2,3,2;5,8,4,9,1,1]
for i=1:1:size(posicion,1)
    for j=1:2:size(posicion,1)-1
        if posicion(i,j)>lim_filas(2)
            posicion(i,j)=lim_filas(2);
        else
        end
    end
end
for i=1:1:size(posicion,1)
    for j=2:2:size(posicion,2)
        if posicion(i,j)>lim_columnas(2)
            posicion(i,j)=lim_columnas(2);
        else
        end
    end
end
posicion
%LIMITA VALORES IGUALES
XXX=1:1:6
for i=1:1:5
XX=setdiff(XXX,posicion(i,:));
uniqueX=unique(posicion(i,:));
if size(uniqueX,2)==1
countOfX=size(posicion,2);
else
countOfX=hist(posicion(i,:),uniqueX);
end
indexToRepeatedValue=(countOfX~=1);
repeatedValues = uniqueX(indexToRepeatedValue);
numberOfAppearancesOfRepeatedValues = countOfX(indexToRepeatedValue);
for j=1:1:size(repeatedValues,2)
    aaa=find(posicion(i,:)==repeatedValues(j));
    for k=1:1:size(aaa,2)-1
        [c,index]=min(abs(XX-posicion(i,aaa(k))));
        posicion(i,aaa(k)) = XX(index);
        XX=setdiff(XXX,posicion(i,:));
    end
end
end
posicion

Tengo la anterior linea de codigo pero lo que realiza es modificar cada fila para que ningun valor sea igual, pero realmente lo que necesito es que cada paquete de 2 no sea igual a los otros en la misma fila
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH

Determinar si varios vectores son iguales

pares de dos convertidos a uno, aplicas tu código vuelves a separar y listo:
1
2
3
4
5
6
7
8
9
a=randi([0,9],6,6);
b=cellfun(@num2str,num2cell(a'),'UniformOutput',false);
c={};
for k=1:2:size(b,1)
    c(end+1,:)=strcat(b(k,:),b(k+1,:));
end
c=cell2mat(cellfun(@str2double,c,'UniformOutput',false)');
d=cellfun(@double,cellfun(@(x) num2str(x,'%02d'),num2cell(c),'UniformOutput',false)','UniformOutput',false);
d=reshape([d{:}]-48,6,6)';
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar
Revisar política de publicidad