Autor Tema: filas consecutivas en un matriz PYTHON

0 Usuarios y 1 Visitante están viendo este tema.

03 Julio, 2019, 06:09 pm
Leído 907 veces

gorkam

  • Junior
  • Mensajes: 27
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Necesito ayuda para sacar el algoritmo que me decida si una matriz, no necesariamente cuadrada, tiene dos filas consecutivas cuyas sumas de elementos coinciden. Tengo el esqueleto del algoritmo, falta rellenarlo.

def rowsum(matrix, i):
    result = 0
    for j in range(0,i+1):
        result = result + matrix[j]
    return result

def equalrowsum(matrix):
    i = 0
    while ______________________ and ______________________:
          ______________________
    return _______________________

03 Julio, 2019, 06:48 pm
Respuesta #1

feriva

  • Matemático
  • Mensajes: 8,922
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)
Necesito ayuda para sacar el algoritmo que me decida si una matriz, no necesariamente cuadrada, tiene dos filas consecutivas cuyas sumas de elementos coinciden. Tengo el esqueleto del algoritmo, falta rellenarlo.

def rowsum(matrix, i):
    result = 0
    for j in range(0,i+1):
        result = result + matrix[j]
    return result

def equalrowsum(matrix):
    i = 0
    while ______________________ and ______________________:
          ______________________
    return _______________________

Hola. éste es un ejemplo "discreto", particular. Si necesitas algo más general, lo conviertes fácilmente cambiando el "for" por "while" y poniendo una matriz de "n" vectores; aunque esto será teórico, porque los ordenadores no cuentan hasta infinito.

Es muy sencillo, no necesitas recurrir al uso de una función ni nada así. Además, no sólo te dice si hay dos iguales seguidas, sino que te dice todas las parejas que haya (una vez generalizado). Si no entiendes algo, me lo preguntas:

Código: [Seleccionar]
k="a"

M=[[0,0,7],[0,0,6],[4,1,1]] #matriz


for j in range (len(M)):

s = sum (M[j])

if s == k:

print ("Sumas consecutivas iguales:", j,",", j+1)

k=s

Saludos.

03 Julio, 2019, 07:00 pm
Respuesta #2

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Hola

Aprovechando el aporte de mi sempai feriva

Spoiler
Una forma en python 3 sería hice unas importantes correcciones

Código: [Seleccionar]
a=sum(M[0])
contador=0
for i in range(1,len(M)):
    if sum(M[i])==a:
        print("Las filas "+str(i)+" y "+str(i+1)+ " cumplen lo requerido.")
        contador=contador+1
    a=sum(M[i])
if contador==0:
    print("No hay filas consecutivas cuyas sumas de elementos coincidan.")


[cerrar]

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

03 Julio, 2019, 07:09 pm
Respuesta #3

feriva

  • Matemático
  • Mensajes: 8,922
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)
Hola

Aprovechando el aporte de mi sempai feriva

Spoiler
Una forma en python 3 sería

Código: [Seleccionar]
a=sum(M[0])

for i in range(1,len(M)):
    if sum(M[i])==a:
        print("Las filas "+str(i+1)+" y "+str(i)+ " cumplen lo requerido.")


[cerrar]

Saludos

Mucho mejor que el mío, dónde va a parar, y más corto; se nota quién es pythonero y científico profesional, yo sólo soy un chapucillas :)

Saludos.

03 Julio, 2019, 07:17 pm
Respuesta #4

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
...
Mucho mejor que el mío, dónde va a parar, y más corto; se nota quién es pythonero y científico profesional, yo sólo soy un chapucillas :)
...

Por favor ... no mientas ni hables mal de mi sempai pythonero>:(  ;D  ;D

Tu relación con python es más cercana...

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

03 Julio, 2019, 07:35 pm
Respuesta #5

feriva

  • Matemático
  • Mensajes: 8,922
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)


Por favor ... no mientas ni hables mal de mi sempai pythonero>:(  ;D  ;D


:D :D Gracias.

Una cosa que no había visto en tu programa: si ninguna suma es igual a la de “sum(M[0])”, pero sí son iguales, por ejemplo, sum(M[1]) y sum(M[2]), éstas no las va a detectar, ¿no?

Saludos.

03 Julio, 2019, 07:46 pm
Respuesta #6

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino


Por favor ... no mientas ni hables mal de mi sempai pythonero>:(  ;D  ;D


:D :D Gracias.

Una cosa que no había visto en tu programa: si ninguna suma es igual a la de “sum(M[0])”, pero sí son iguales, por ejemplo, sum(M[1]) y sum(M[2]), éstas no las va a detectar, ¿no?

Saludos.

TE DIJEEEEE...

Gracias por las observaciones, ya he añadido y corregido al código lo que faltaba.

Espero que esta vez esté bien.

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...

03 Julio, 2019, 07:48 pm
Respuesta #7

geómetracat

  • Moderador Global
  • Mensajes: 1,312
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Solo por diversión (no creo que sea bueno implementar las cosas así, menos si se está aprendiendo), una solución en una línea:

Spoiler
Código: [Seleccionar]
def equalrowsum(M):
    return sum([(sum(M[i]) == sum(M[i+1])) for i in range(len(M)-1)]) > 0
[cerrar]
La ecuación más bonita de las matemáticas: \( d^2=0 \)

03 Julio, 2019, 07:51 pm
Respuesta #8

feriva

  • Matemático
  • Mensajes: 8,922
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)

TE DIJEEEEE...

Gracias por las observaciones, ya he añadido y corregido al código lo que faltaba.

Espero que esta vez esté bien.

Saludos

Seguro que ya sí.

Pero esto no quiere decir nada; yo ni sé poner los paréntesis para el Pytho3 :D (ahora editaré) Tú sigues programando mucho mejor que yo, insisto, un despiste no va a cambiar eso.

Saludos.

03 Julio, 2019, 08:18 pm
Respuesta #9

feriva

  • Matemático
  • Mensajes: 8,922
  • País: es
  • Karma: +1/-0
  • Sexo: Masculino
  • ¡EUKERA!... ¡UEREKA!... ¡EUREKA! (corregido)
Solo por diversión (no creo que sea bueno implementar las cosas así, menos si se está aprendiendo), una solución en una línea:

Spoiler
Código: [Seleccionar]
def equalrowsum(M):
    return sum([(sum(M[i]) == sum(M[i+1])) for i in range(len(M)-1)]) > 0
[cerrar]

Gracias por compartirlo, geómetracat, no lo conocía; qué cosas tiene el Python, no deja de sorprender.

Saludos.

03 Julio, 2019, 08:58 pm
Respuesta #10

geómetracat

  • Moderador Global
  • Mensajes: 1,312
  • País: es
  • Karma: +0/-0
  • Sexo: Masculino
Gracias por compartirlo, geómetracat, no lo conocía; qué cosas tiene el Python, no deja de sorprender.

Saludos.

Sí, Python es una maravilla.  ;D
En particular, las "list comprehension" es una función increíblemente útil que no he visto en otros lenguajes de programación. Es sorprendente la cantidad de problemas típicos que se pueden resolver con una única línea de Python gracias a ello.
La ecuación más bonita de las matemáticas: \( d^2=0 \)

03 Julio, 2019, 09:07 pm
Respuesta #11

ingmarov

  • Moderador Global
  • Mensajes: 4,627
  • País: hn
  • Karma: +0/-0
  • Sexo: Masculino
Gracias por compartirlo, geómetracat, no lo conocía; qué cosas tiene el Python, no deja de sorprender.

Saludos.

Sí, Python es una maravilla.  ;D
En particular, las "list comprehension" es una función increíblemente útil que no he visto en otros lenguajes de programación. Es sorprendente la cantidad de problemas típicos que se pueden resolver con una única línea de Python gracias a ello.

Síííí, una maravilla.

El compañero Pierrot ya nos ha mostrado código de una línea en el lenguaje Perl.

http://rinconmatematico.com/foros/index.php?topic=83373.msg334070#msg334070

Saludos
No te confíes, revisa lo que escribo. Yo también me equivoco.
Odio el autocorrector de Android...