Saludos compañeros !
En esta ocasion vamos a ver como se puede escalar una matriz de puntos (x,y).
Pero primero, a que le llamamos "escalar"? Supongamos que tenemos un monton de puntos sueltos en un espacio indefinido, podriamos tener uno en (0, 1) y otro en (34235, 54234). Pero como eso es bastante dificil de graficar vamos a darles unas diensiones mas normales, digamos 100x100. Asi lo que querriamos de output es una matriz con valores entre 0 y 100 sin perder las proporciones de los puntos.
Vamos directo al ejemplo!
>>> a = [(1,6), (2,5), (3,4), (34,42), (32,12)]
>>> x_mx=max(a, key=lambda x: x[0])[0] # esto se explica aca!
>>> y_mx=max(a, key=lambda x: x[1])[1]
>>> x_img=100
>>> y_img=100
>>> map(None, map(lambda x: x[0]*x_img/x_mx, a), map(lambda x: x[1]*y_img/y_mx, a)) # vamos a ir desglosando esto abajo...
[(2, 14), (5, 11), (8, 9), (100, 100), (94, 28)]
El operador map de python es extraordinario para trabajar con arreglos, en escencia lo que hace es aplicar la funcion que tiene como primer parametro a cada elemento de una lista (como un for abreviado). Y si tenemos dos o mas listas las une.
Esta sentencia: map(lambda x: x[0]*x_img/x_mx, a) simplemente aplica la vieja y querida regla de tres simples a cada elemento, donde x_img es el tamaño que deseamos obtener. Analogamente se ejecuta sobre el eje y.
La sentencia por fuera: map(None, x... , y... ) simplemente une ambos arrays para obtener el resultado.
Y como diria algun viejo personaje de dibujos animados, ee-e-e-eso es todo amigos !
Saludos y hasta la proxima!
No hay comentarios:
Publicar un comentario