elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: (TUTORIAL) Aprende a emular Sentinel Dongle By Yapis


+  Foro de elhacker.net
|-+  Programación
| |-+  Scripting
| | |-+  [Python] Sumatorio de elementos adyacentes en una matriz [SOLUCIONADO]
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: [Python] Sumatorio de elementos adyacentes en una matriz [SOLUCIONADO]  (Leído 10,453 veces)
eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
[Python] Sumatorio de elementos adyacentes en una matriz [SOLUCIONADO]
« en: 12 Marzo 2013, 23:34 pm »

Hola, tengo un problema con el cual llevo varios días comiendome la cabeza. La cuestión es que tengo que realizar un ejercicio el cual se trata de que dada una matriz numérica cualquiera, la función o programa devuelva otra matriz cuyos elementos sean la suma de los elementos que rodeaban a los de la matriz anterior, espero haberme explicado.

Yo de momento he codificado hasta aquí, pero el resultado que me da es erroneo:

Código
  1. L = [
  2.     [1,2,3],
  3.     [2,4,7],
  4.     [5,6,7]
  5.    ]
  6.  
  7. L2 = [
  8.     [0,0,0],
  9.     [0,0,0],
  10.     [0,0,0]
  11.    ]
  12.  
  13. for i_rows in range(0,len(L)):
  14.  
  15.    for i_cols in range(len(L[i_rows])):
  16.  
  17.        for i in range(i_rows-1, i_rows+1):
  18.            for j in range(i_cols-1, i_cols+1):
  19.  
  20.                if i_cols >= 0 and i_rows >= 0:
  21.                    L2[i_rows][i_cols] += L[i][j]
  22.  
  23. print(L2[0])
  24. print(L2[1])
  25. print(L2[2])

Espero que me echen una mano, únicamente me gustaría un poco de información para codificar correctamente el algoritmo.

Gracias.


« Última modificación: 14 Marzo 2013, 23:19 pm por eLank0 » En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #1 en: 14 Marzo 2013, 00:38 am »

Hola de nuevo,

Os publicaré los avances que he hecho. Ahora ya consigo recorrer correctamente los elementos adyacentes a mi elemento parámetro:

Código
  1. L = [
  2.     [1,2,3],
  3.     [2,4,7],
  4.     [5,6,7]
  5.    ]
  6.  
  7. L2 = []
  8.  
  9. #Buscamos los vecinos de la posición L[1, 0]
  10.  
  11. a = 1
  12. b = 0
  13.  
  14. for i in range (a-1, a+2, 1):
  15.    for j in range (b-1, b+2, 1):
  16.        if i >= 0 and j >= 0:
  17.            print(L[i][j])
  18.  
  19. #for item in L2:
  20.    #print(item, end=' ')

La salida de este código es:

Citar
1
2
2
4
5
6

Ahora lo último que me falta es una segunda condición en el segundo bucle para que cuando llegue a la posición [a], no imprima nada (No debería imprimir el segundo 2).

He provado con:

Código
  1. if i is not a and j is not b:
  2.     print(L[i][j])

No me da el resultado correcto.

¿Cómo debería ser esta condición para que haga exactamente lo que yo quiero que es saltarme la posición [a] ?

Gracias!
            

PD: Nótese que he cambiado un poco el código para hacerlo más sencillo y así acatar el problema de raíz y cuando reciba los números correctos, ya haré el sumatorio, que es lo de menos.


« Última modificación: 14 Marzo 2013, 00:42 am por eLank0 » En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #2 en: 14 Marzo 2013, 00:47 am »

no entiendo a que sumatoria. explícate.

a que sumatoria te refieres?
« Última modificación: 14 Marzo 2013, 01:04 am por Danyfirex » En línea

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #3 en: 14 Marzo 2013, 19:22 pm »

Hola,

Pues dada la matriz L y como parámetro una posición por ejemplo a = 1 y b = 0, que en este caso es el número 2, obtener el sumatorio de sus elementos adyacentes (o vecinos) que son el 1, 2, 4, 5, 6.

El recorrido del bucle ahora ya es perfecto, o sea, está bien. Recorre todas las posiciones desde [a-1][b-1] hasta [a+1][b-1] siempre positivos para que no coja la matriz por el lado opuesto.

Lo que falta es saber qué condición falta para que se salte la posición parámetro ya que no interesa en el sumatorio.

Gracias.

En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #4 en: 14 Marzo 2013, 19:32 pm »

Si no entendi mal, lo que quieres es la sumatoria de los elementos circundantes a un elemento dado.

Teniendo en cuanta que los elementos estan a distancia 1 (posicionalmente hablando), seria algo tan sencillo como:

busqueda: (a,b)

sumatoria: (a-1, b-1) + (a-1, b) + (a-1, b+1) + (a, b-1) + (a, b) + (a, b+1) + (a+1, b-1) + (a+1, b) + (a+1, b+1)

Solo hay que verificar que las posiciones sean validas (por ejemplo si (a,b) esta en un extremo de la matriz o si esta a un "costado")

Si no es asi, entendi mal...  :P

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #5 en: 14 Marzo 2013, 19:45 pm »

Es así de hecho, si te fijas en el código lo hace correctamente pero durante el recorrido de los bucles, se pasa siempre por la posición parámetro. Por [a] no hay que pasar.

Necesito saber como escribir la condición correcta para que se la salte.

Gracias.
« Última modificación: 14 Marzo 2013, 19:47 pm por eLank0 » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #6 en: 14 Marzo 2013, 19:52 pm »

El pseudo-codigo que puse no usa bucles y es muy sencillo de implementar en python.

Si no quieres que el elemento buscado se sume, quitalo de la sumatoria.

Con los bucles estas recorriendo innecesariamente la matriz.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

eLank0
eLhAcKeR r00Lz


Desconectado Desconectado

Mensajes: 1.062



Ver Perfil WWW
Re: [Python] Sumatorio de elementos adyacentes en una matriz
« Respuesta #7 en: 14 Marzo 2013, 23:19 pm »

Quizá tengas razón pero a mi modo de entender no es demasiado 'bonito' ese trozo de código con tantos sumandos pudiendo automatizarlo todo.

De hecho acabo de completar mi algoritmo:

Código
  1. def SumaVecinos(M, FIL, COL):
  2. '''
  3. (int, int) -> int
  4.  
  5. Realiza el sumatorio de los elementos adyacentes al elemento [FIL][COL] de la matriz M.
  6. '''
  7.  
  8. L = []
  9.  
  10. for i in range (FIL-1, FIL+2, 1):
  11.    for j in range (COL-1, COL+2, 1):
  12.        if i == FIL and j == COL:
  13.            continue
  14.        if i == len(M) or j == len(M[i]):
  15.            break
  16.        if i >= 0 and j >= 0:
  17.            L.append(M[i][j])
  18.  
  19. return sum(L)
  20.  
  21. L = [
  22.     [1,2,3],
  23.     [2,4,7],
  24.     [5,6,7]
  25.    ]
  26.  
  27. SumaVecinos(L, 1, 0)
  28.  
  29. #Resultado: 18

Muchas gracias por la colaboración.

PD: Para pulirlo he tenido que añadir las sentencias break y continue que me permiten moverme libremente por dentro de un bucle.
« Última modificación: 14 Marzo 2013, 23:21 pm por eLank0 » En línea

MCKSys Argentina
Moderador Global
***
Desconectado Desconectado

Mensajes: 5.513


Diviértete crackeando, que para eso estamos!


Ver Perfil
Re: [Python] Sumatorio de elementos adyacentes en una matriz [SOLUCIONADO]
« Respuesta #8 en: 14 Marzo 2013, 23:27 pm »

Muchas gracias por la colaboración.

No hay por dónde!  ;D

Quizá tengas razón pero a mi modo de entender no es demasiado 'bonito' ese trozo de código con tantos sumandos pudiendo automatizarlo todo.

Estoy de acuerdo: sobre gustos no hay nada escrito...  :P

Pero hay algo que no haz teniendo en cuenta:

Mi codigo SIEMPRE se ejecutara a igual velocidad. Ya sea en una matriz de 3x3 como en una de NxN.

Solo para hacer pruebas, intenta definir la funcion usando el algoritmo que expuse y haz pruebas con matrices grandes. Veras que los resultados varian bastante.  ;)

En fin, creo que el problema esta solucionado y, mejor aún, que haz descubierto la forma de hacerlo tu mismo.

Y esa es la mejor forma de hacer las cosas, segun lo veo, pues haces y aprendes en el camino.

Saludos!
En línea

MCKSys Argentina

"Si piensas que algo está bien sólo porque todo el mundo lo cree, no estás pensando."

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
[Python]Ir añadiendo elementos a una tabla « 1 2 »
Scripting
Debci 10 6,297 Último mensaje 2 Mayo 2010, 00:53 am
por leogtz
Intercambiar elementos de lugar en una matriz
Programación C/C++
binaryum 4 8,471 Último mensaje 25 Julio 2010, 22:15 pm
por mk_137
multiplicar los elementos de una fila en python
Dudas Generales
Matinegro 6 5,215 Último mensaje 11 Noviembre 2013, 21:52 pm
por Matinegro
Duda del desplazamiento de los elementos de una matriz(norte,sur,este,oeste)
Programación C/C++
xuhipoint 3 6,260 Último mensaje 14 Mayo 2014, 18:21 pm
por Blaster
Problema con mostrar elementos de la matriz
Programación C/C++
Rhythmical 2 2,710 Último mensaje 10 Septiembre 2017, 18:21 pm
por Rhythmical
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines