Matlab - Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

 
Vista:
sin imagen de perfil
Val: 1
Ha aumentado su posición en 44 puestos en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por Darin (3 intervenciones) el 23/07/2019 17:37:57
Saludos, quien pudiera orientarme para hacer el siguiente código estuviera muy agradecido.

Tengo una una matriz de 6*6
A=[0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1]

Quiero obtener los vecinos de cada elemento para sacar luego sus máximos es decir para la primera fila:

0=[2, 8, 14] el máximo es 14
2=[0, 3, 8, 14 9] el máximo es 14
3=[2,4,14,9,7] el máximo es 14
4=[3,56,9,7,78] el máximo es 78
56=[4,16,7,78,15] el máximo es 78
16=[56,78,15] el máximo es 78
.
.
.

Continuarían las demás filas

Finalmente hallaría los máximos de cada unos de los vecinos correspondientes a los elementos de la matriz, por ultimo firmar una nueva matriz con los máximos.
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: 8.042
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por JOSE JEREMIAS CABALLERO (5780 intervenciones) el 26/07/2019 17:34:52
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
clear all
A=[  0     2     3     4    56    16
     8    14     9     7    78    15
     4    13     7     4    11     1
     6    21     4     5    73     8
     2    13     1     7    11    20
     8    11     7     9    51     1]
 [f,c]=size(A);
 
 for i=1:f-1
     k=1;
     for j=1:c
         if j==1
             M(k,i)=max([A(i,j+1) A(i+1,j:j+1)]);
             k=k+1;
         end
 
         if j>1 && j<c
             M(k,i)=max([A(i,j-1) A(i,j+1) A(i+1,j-1:j+1)]);
             k=k+1;
         end
 
           if j==c
             M(k,i)=max([A(i,j-1) A(i+1,j-1:j)]);
             k=k+1;
           end
 
 
     end
 end
  M


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
>> elemento_vecino
 
A =
 
     0     2     3     4    56    16
     8    14     9     7    78    15
     4    13     7     4    11     1
     6    21     4     5    73     8
     2    13     1     7    11    20
     8    11     7     9    51     1
 
 
M =
 
    14    14    21    21    13
    14    13    21    13    11
    14    14    21    21    13
    78    78    73    73    51
    78    15    73    20    51
    78    78    73    73    51

falta hallar para los vecinos de la última fila, revisando el código dado puede modificar o agregar al código para hallar los vecinos de la última 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 JOSE JEREMIAS CABALLERO
Val: 8.042
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por JOSE JEREMIAS CABALLERO (5780 intervenciones) el 26/07/2019 19:32:11
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
48
clear all
A=[  0     2     3     4    56    16
     8    14     9     7    78    15
     4    13     7     4    11     1
     6    21     4     5    73     8
     2    13     1     7    11    20
     8    11     7     9    51     1]
 [f,c]=size(A);
 
 for i=1:f
     k=1;
     for j=1:c
         if j==1 && i<f
             M(i,k)=max([A(i,j+1) A(i+1,j:j+1)]);
             k=k+1;
         end
 
         if j>1 && j<c && i<f
             M(i,k)=max([A(i,j-1) A(i,j+1) A(i+1,j-1:j+1)]);
             k=k+1;
         end
 
           if j==c && i<f
             M(i,k)=max([A(i,j-1) A(i+1,j-1:j)]);
             k=k+1;
           end
 
           if i==f && j==1
             M(i,k)=max([A(i,j+1) A(i-1,j:j+1)]);
             k=k+1;
           end
 
             if i==f && j>1 && j<c
             M(i,k)=max([A(i,j-1:2:j+1) A(i-1,j-1:j+1)]);
             k=k+1;
             end
 
             if i==f && j==c
             M(i,k)=max([A(i,j-1) A(i-1,j-1:j)]);
             k=k+1;
              end
 
         end
     end
 
 
 
  Max=[A(1,:); M]


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
>> elemento_vecino
 
A =
 
     0     2     3     4    56    16
     8    14     9     7    78    15
     4    13     7     4    11     1
     6    21     4     5    73     8
     2    13     1     7    11    20
     8    11     7     9    51     1
 
 
Max =
 
     0     2     3     4    56    16
    14    14    14    78    78    78
    14    13    14    78    15    78
    21    21    21    73    73    73
    21    13    21    73    20    73
    13    11    13    51    51    51
    13    13    13    51    20    51

todas la fila incluidas
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

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por darwin (3 intervenciones) el 30/07/2019 16:25:52
Saludos, JOSE JEREMIAS CABALLERO. Muchas gracias por la información, lo único que no está teniendo en cuenta son las diagonales superiores izquierdas y derechas en algunos casos, es decir la matriz de máximos para el ejemplo anterior debería quedar así:

Max =


14 14 14 78 78 78
14 13 14 78 56 78
21 21 21 73 73 73
21 13 21 73 20 73
21 21 21 73 73 73
13 13 13 51 20 51
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 JOSE JEREMIAS CABALLERO
Val: 8.042
Oro
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por JOSE JEREMIAS CABALLERO (5780 intervenciones) el 30/07/2019 16:29:08
Disculpe seguí su ejemplo que puso.

" Quiero obtener los vecinos de cada elemento para sacar luego sus máximos es decir para la primera fila:

0=[2, 8, 14] el máximo es 14
2=[0, 3, 8, 14 9] el máximo es 14
3=[2,4,14,9,7] el máximo es 14
4=[3,56,9,7,78] el máximo es 78
56=[4,16,7,78,15] el máximo es 78
16=[56,78,15] el máximo es 78
.
.
.

Continuarían las demás filas "

con la frase "Continuarían las demás filas", se da entender que se sigue el mismo tipo de análisis.

Con las modificaciones pertinentes se puede llegar a la última matriz que está mostrando.
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

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por Darwin (3 intervenciones) el 30/07/2019 16:36:39
Es el mismo ejemplo, sólo que los máximos para las diagonales superiores como por ejemplo de la fila 5 no están correctas

A =

0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1

Es decir, debería dar:

Max =

14 14 14 78 78 78
14 13 14 78 56 78
21 21 21 73 73 73
21 13 21 73 20 73
21 21 21 73 73 73
13 13 13 51 20 51
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
Val: 3.677
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 30/07/2019 22:54:06
¿Estás seguro de que eso es lo que realmente debería dar? ya que por ejemplo en la Fila Número 3 Columna número 5 donde está ubicado el número 11, arriba de él está el número 78, sin embargo tú colocas que en esa posición el Máximo es 73,
No es necesario tanto código en Matlab para el desarrollo ya que esto es un problema de manipulación de Matrices, te dejo la forma de solucionar el problema siempre y cuando el concepto de vecinos sean los posibles 8 vecinos de alrededor :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
A=[0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1]
k=size(A,1);
a=(1:numel(A))+k+1+2*ceil((1:numel(A))/k);
b=[a-k-3; a-1; a+k+1; a-k-2; a+k+2; a-k-1; a+1; a+k+3];
b(or(mod(b,k+2)==1,mod(b,k+2)==0))=numel(A)+2+k+2*(k+1);
b=b-k-2*ceil(b/(k+2))+1;
b(or(b<=0,b>numel(A)))=numel(A)+1;
AA=[A(:); nan];
maximos=reshape(max(AA(b)),size(A,1),size(A,2))


A =

0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1


maximos =

14 14 14 78 78 78
14 13 14 78 56 78
21 21 21 78 78 78
21 13 21 73 20 73
21 21 21 73 73 73
13 13 13 51 20 51
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
Imágen de perfil de JESUS DAVID ARIZA ROYETH
Val: 3.677
Plata
Ha mantenido su posición en Matlab (en relación al último mes)
Gráfica de Matlab

Elementos vecino (arriba, abajo, izquierda, derecha, diagonales) de los elementos de una matriz)

Publicado por JESUS DAVID ARIZA ROYETH (1818 intervenciones) el 31/07/2019 00:22:28
Utilizando el comando conv2 en base a la Idea propuesta por Stephen Cobeldick llegaría a la misma respuesta anterior :

1
2
3
4
5
6
7
8
9
10
11
12
13
14
A=[0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1]
Maximos=zeros(size(A));
for k=1:size(A,1)
    for j=1:size(A,2)
        M=zeros(size(A));
        M(k,j)=1;
        Maximos(k,j)=max(A(conv2(M,[1,1,1;1,0,1;1,1,1],'same')>0));
    end
end

A =

0 2 3 4 56 16
8 14 9 7 78 15
4 13 7 4 11 1
6 21 4 5 73 8
2 13 1 7 11 20
8 11 7 9 51 1

>> Maximos

Maximos =

14 14 14 78 78 78
14 13 14 78 56 78
21 21 21 78 78 78
21 13 21 73 20 73
21 21 21 73 73 73
13 13 13 51 20 51
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