El 23/08/2012, a las 15:05, Horacio escribió: > Buenas, este problema me desafía todo mi sentido común... lo que busco > en una matriz A de NRxNR es hallar las codiagonales no nulas y su > longitud.. > > AVISO: Este algoritmo funciona, lo he probado en PERL!! > > Pero el siguiente código no se por qué LM y S se mantienen en cero??? > luego del ELSE: cuando s+=1 si se incrementa en 1!! como lo compruebo > en el primer "print" WTF!!! > > d=[] > d=[0]*NR > LM=0 > s=0 > for c in range(5,NR): > s=0 > for x in range(NR): > y=x+c > if (y<NR): > if (A[x][y]==1): > s+=1 > print s # aca da <> 0 > else: > print s,LM # aca me da s=LM=0 ???? el equivalente en > perl me da <> 0??? WTF > if (s>LM): > LM=s > d[s]+=1 > s=0 > print "Diagonal maxima %d" % LM > > Alguien me puede decir que cuernos le pasa al if??
Si lo que quieres es escribir tu propio algoritmo puedes ignorar todo el mensaje pero, si pudieras trabajar con numpy... puedes encontrar la diagonal con numpy.diagonal(a) Si las codiagonales son las diagonales adyacentes a la diagonal principal (no sé cual es la definición exacta) puedes encontrarlas "recortando" tu matriz para convertirlas en las diagonales de las matrices "recortadas". Codiagonal superior cs = numpy.diagonal(a[:,1:]) Codiagonal inferior ci = numpy.diagonal(a[1:,:]) Si lo que quieres es ver si son todo ceros puedes hacer not cs.any() Si lo que quieres es contar el número de elementos que no son cero puedes obtenerlos así cs[cs != 0] y contarlos con len(cs[cs != 0]) Aparte del ahorro en escribir algoritmos tengo la sensación de que sería más eficiente para matrices grandes. Un saludo _______________________________________________ Python-es mailing list Python-es@python.org http://mail.python.org/mailman/listinfo/python-es FAQ: http://python-es-faq.wikidot.com/