Python - Matrices y listas python

   
Vista:

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 12/01/2013 18:50:18
Hola! Me gustaria saber como puedo conseguir eliminar una lista de una lista de listas cuando la lista no contenga entre sus elementos el que yo quiero.
Es una funcion para recortar los margenes en blanco de una imagen en blanco y negro.
Gràcias.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
-1
Responder
Imágen de perfil de xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 13/01/2013 10:57:01
HOla, no te entiendo muy bien a que te refieres, pero para eliminar un elemento de una lista, puedes utilizar remove() que elimina el primer elemento que tenga una coincidencia, incluso si es una lista.
1
2
3
4
l=[[0,0], [1,1], [2,2]]
l.remove([1,1])
print l
[[0, 0], [2, 2]]

Si nos puedes comentar con mas detalle...
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 13/01/2013 12:43:12
Pues veras, lo q tengo es una imagen en blanco y negro, que se me traduce en una matriz pues lo que quiero hacer es eliminar los margenes blancos de la imagen hasta que la imagen ocupe todo el espacio, para eso necesito eliminar las listas de la matriz que tengan a 255 todos los elementos pero no se como hacerlo. Gràcias!
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 13/01/2013 18:11:39
Hola, esto puedes hacer con una simple función lambda... haber si te sirve:
1
2
l = [1,2,3,2,2,2,3,4]
filter(lambda a: a != 2, l)

te devolverá: [1, 3, 3, 4]

filter, ejecuta la función lambda pasándole cada unos de los valores de la lista, y devolviendo una lista nueva.

Coméntanos, si te sirve, ok?
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 13/01/2013 20:03:19
No, no me sirve esto. Lo que necesito es esto: Supongamos que tengo esta matriz, pues necesito una funcion para que elimine las listas que todos los elementos són 255 y luego otra que pueda eliminar las columnas que són todo 255, es decir que quede así.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
[
[255, 255, 255,255 ],
[255, 255 , 0     ,255],
[255,  0   ,  0     ,255],
[255, 255, 255,255 ],
[255, 255, 255,255 ]
]
   [
  [255, 255  , 0     ,255],
  [255,  0   , 0     ,255]
  ]
 
  [
  [255,    0 ],
  [   0 ,   0   ]
]


Esto es lo que necesito hacer si alguien me pudiera ayudar. Gràcias.
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 13/01/2013 21:14:47
No te entiendo... esta lista es la original? o el resultado que quieres?
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 14/01/2013 08:55:20
La primera lista es la original, la segunda es quitando las sublistas que todos los elementos són 255, y la tercera es el resultado final quitando tambien las columnas de la matriz que son 255.
Gràcias.
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 14/01/2013 09:56:10
Haber si te sirve este código:

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
#lista inicial
l=[
    [255, 255, 255,255],
    [255, 255, 0  ,255],
    [255, 0  , 0  ,255],
    [255, 255, 255,255],
    [255, 255, 255,255]
]
 
def functionRemoveElementInList(l):
    # definimos la nueva lista
    newlist=[]
    # recorremos toda la lista
    for i in l:
        if i!=[255,255,255,255]:
            # si el valor de la lista es diferente de [255,255,255,255]
            # eliminamos todos los valores 255 de su contenido y lo asignamos
            # a la nueva lista (newlist)
            newlist.append(filter(lambda a: a != 255, i))
    return newlist
 
print functionRemoveElementInList(l)
 
"""
el resultado es:
[
    [0],
    [0, 0]
]
"""

Coméntanos, ok?
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 14/01/2013 10:19:02
Asi no me acaba de servir porque si te fijas en el resultado que obtienes solo obtienes los 0, y yo necesito obtener esto:

[
[255, 0],
[0 , 0]
[
Ya que la primera columna de la matriz contiene un cero, tengo que dejarla como estaba.
Ademas esta lista es un ejemplo, yo no se como de larga es la matriz [255,255,255,255]
Gràcias.
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 16/01/2013 07:09:58
Alguien me puede ayudar? Gràcias
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 16/01/2013 07:51:45
Hola, no entiendo porque queda una lista con el valor 255... segun tu indicas en tu anterior mensaje "quitando tambien las columnas de la matriz que son 255"

Nos puedes explicar...
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 16/01/2013 16:10:46
A ver si me consigo explicar, cuando abres una imagen en python usando la libreria PIL, la imagen se traduce en una matriz, al ser en blanco y negro la matriz solo contiene o 0 que es el negro o 255 que es el blanco. Yo necesito una funcion para eliminar las filas que son todo 255, que seria el equivalente a quitar los margenes superiores e inferiores blancos de la imagen asi que la imagen quedaria bien encuadrada por ariiba y abajo.
Después necesito otra funcion que elimine las columnas de la matriz que són todo 255 para eliminar los margenes laterales, si en una columna hay algun 255 no borra esa columna.
<<ESTE ES UN EJEMPLO>>(pero yo no se como es de grande la matriz, tiene que ser general)
[
[255, 255, 255, 255 ],
[255, 255 , 0 , 255],
[255, 0 , 0 , 255],
[255, 255, 255,255 ],
[255, 255, 255,255 ]
]
<< ESTO ES DESPUES DE ELIMINAR LAS FILAS DE 255>>

[
[255, 255 , 0 ,255],
[255, 0 , 0 , 255]
]
<<ESTO ES DESPUES DE ELIMINAR LAS COLUMNAS QUE SON TODO 255>>
[
[255, 0 ],
[ 0 , 0 ]
]
GRACIAS!
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 16/01/2013 20:18:43
Gracias por aclarar-lo... haber si te vale ahora...

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
#lista inicial
l=[
    [255, 255, 255,255],
    [255, 255, 0  ,255],
    [255, 0  , 0  ,255],
    [255, 255, 255,255],
    [255, 255, 255,255]
]
 
def functionRemoveElementInList(l):
    # definimos la nueva lista
    newlist=[]
    # recorremos toda la lista
    for i in l:
        if 0 in i:
            # tiene algun 0 en la lista
            new_i=i
            if i[0]==255:
                new_i=new_i[1:]
            if i[-1]==255:
                new_i=new_i[:-1]
            newlist.append(new_i)
    return newlist
 
print functionRemoveElementInList(l)
 
"""
el resultado es:
[
    [255, 0],
    [0, 0]
]
"""

Coméntanos, ok?
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 17/01/2013 10:00:41
Hola. Te comento he hecho algunos casos de prueba y no me acaba de servir porque si por ejemplo las listas en vez de tener 4 elementos tienen 5 ya no funciona correctamente.Por ejemplo si pongo esta lista de entrada:
l=[ [255, 255, 255,255,255,255],
[255, 255, 0,255,255,255],
[255, 0, 0 , 255,255,255],
[255, 255, 255,255,255,255 ],
[255, 255, 255,255,255,255]
]
el resultado es el siguiente:
[
[255, 0,255,255],
[0, 0,255,255]
]
Gràcias!
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 17/01/2013 15:22:18
La verdad, pues creo que no he entendido todavía que valores 255 quitar si la columna no esta llena... lo siento...
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 17/01/2013 16:32:23
Gràcias por la ayuda, ya he conseguido hacerlo de otra forma.
Otra cosa, me podrias ayudar con una funcion para cambiar el tamaño de una imagen es decir hacer un escalado?
La funcion obtiene como parametros la imagen i la altura h del tamaño al que la queremos escalar.
Gracias de antemano.
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 17/01/2013 16:59:36
Nos puedes comentar como lo has hecho??? me tiene intrigado...

Si claro... crea un nuevo hilo y vamos a ello.
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 17/01/2013 17:31:36
Si, primero he cogido la matriz y he eliminado las filas que eran todo 255, una vez hecho esto para poder eliminar unicamente las columnas que eran completamente 255, he hecho la matriz transpuesta y he aplicado el mismo metodo que al principio para eliminar las filas que eran todo 255, y para acabar he vuelto a hacer la transpuesta.
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 xve

Matrices y listas python

Publicado por xve (1229 intervenciones) el 17/01/2013 20:39:52
Muy interesante... nos puedes mostrar el código?, no entiendo muy bien como lo has hecho.
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

Matrices y listas python

Publicado por moneyteam (14 intervenciones) el 17/01/2013 21:04:04
l=[
[255, 255, 0,255,255],
[255, 0, 0 , 255,255],
[255, 0, 0 , 255,255]
]

def htrim(l):
rows = len(l)
cols = len(l[0])
a=[[l[j][i] for j in xrange(rows)] for i in xrange(cols)]
newlist=[]
for i in a:
if 0 in i:
new_i=i
newlist.append(new_i)

rows = len(newlist)
cols = len(newlist[0])
b=[[newlist[j][i] for j in xrange(rows)] for i in xrange(cols)]
return b
print htrim(l)
Este es el codigo!
Me podrias ayudar en el otro hilo, se llama: hacer una funcion scale para cambiar el tamaño de una imagen
Gràcias!!
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