[Python-es] Como hacer una aproximación numérica?

69 views
Skip to first unread message

Diego Uribe Gamez

unread,
Aug 9, 2012, 5:12:06 PM8/9/12
to La lista de python en castellano
Un saludo a todos, hoy estoy haciendo un código el cual tiene que aproximar un numero genérico a unos números que yo mismo determino como en una linea en x pero la verdad no sabría como hacerlo de forma simple, me explico:

a = 69.9

los números a los que quiero aproximar según este caso son entre 60 y 75.

Estoy trabajando con grados y la idea es aproximar cualquier numero que entre a la formula, aproximar entre estos:

0,15,30,45,60,75,90,105,120,135,150,165,180,210,225,240,255,270

otro ejemplo seria a = 104.5 y la idea seria que lo aproximara al min 90 o al max 105 yo se que es lógico que se aproxime a 105 pero la idea es que lo haga el código en python de forma simple.

Alguna idea?

--
 Diego Alonso Uribe Gamez

Desarrollador web

Twitter: @DiegoUG

Google+: http://gplus.to/diegoug




Jose Caballero

unread,
Aug 9, 2012, 5:16:54 PM8/9/12
to La lista de python en castellano


El 9 de agosto de 2012 17:12, Diego Uribe Gamez <diego.ur...@gmail.com> escribió:
Un saludo a todos, hoy estoy haciendo un código el cual tiene que aproximar un numero genérico a unos números que yo mismo determino como en una linea en x pero la verdad no sabría como hacerlo de forma simple, me explico:

a = 69.9

los números a los que quiero aproximar según este caso son entre 60 y 75.

Estoy trabajando con grados y la idea es aproximar cualquier numero que entre a la formula, aproximar entre estos:

0,15,30,45,60,75,90,105,120,135,150,165,180,210,225,240,255,270

otro ejemplo seria a = 104.5 y la idea seria que lo aproximara al min 90 o al max 105 yo se que es lógico que se aproxime a 105 pero la idea es que lo haga el código en python de forma simple.

Alguna idea?




suena a combinar un for con un if.
Que has intentado?

José Sabater Montes

unread,
Aug 9, 2012, 5:50:27 PM8/9/12
to La lista de python en castellano

Hola,

Si los intervalos entre los números a redondear son siempre iguales puedes usar algo como esto:

def aprox(x,intervalo=15):
    return int(((x+(intervalo/2.))/intervalo))* intervalo

o este equivalente:

def aprox(x, intervalo =15):
    return int(float(x)/intervalo +0.5)* intervalo

Si tienes que elegir el más cercano de una lista que introduzcas, habría que hacer algo ligeramente más complejo.

Un saludo.

_______________________________________________
Python-es mailing list
Pyth...@python.org
http://mail.python.org/mailman/listinfo/python-es
FAQ: http://python-es-faq.wikidot.com/

Alexis Roda

unread,
Aug 9, 2012, 5:51:14 PM8/9/12
to La lista de python en castellano
Al 09/08/12 23:12, En/na Diego Uribe Gamez ha escrit:

> Estoy trabajando con grados y la idea es aproximar cualquier numero que
> entre a la formula, aproximar entre estos:
>
> 0,15,30,45,60,75,90,105,120,135,150,165,180,210,225,240,255,270
>
> otro ejemplo seria a = 104.5 y la idea seria que lo aproximara al min 90
> o al max 105 yo se que es lógico que se aproxime a 105 pero la idea es
> que lo haga el código en python de forma simple.
>
> Alguna idea?

>>> a = 104.5
>>> int(a/15) * 15, (int(a/15) + 1) * 15
(90, 105)


Saludos

Diego Uribe Gamez

unread,
Aug 9, 2012, 5:52:15 PM8/9/12
to La lista de python en castellano
voy a facilitarme las cosas, entonces voy a proximar a su decena mas cercana:

69.9 ---> quedaría en 70

104.5 ---> quedaría en 100

voy a ver lo que me mandaste Jose.

Gracias.

Juan Luis Cano Rodríguez

unread,
Aug 9, 2012, 6:06:19 PM8/9/12
to La lista de python en castellano
>>> import numpy as np
>>> angulos = np.arange(19) * 15
>>> angulos
array([  0,  15,  30,  45,  60,  75,  90, 105, 120, 135, 150, 165, 180,
       195, 210, 225, 240, 255, 270])
>>> a = 69.9
>>> b = 104.5
>>> angulos[np.abs(a - angulos).argmin()]
75
>>> angulos[np.abs(b - angulos).argmin()]
105

Espero que te sirva, un saludo! :)

2012/8/9 Diego Uribe Gamez <diego.ur...@gmail.com>

José Sabater Montes

unread,
Aug 9, 2012, 6:17:25 PM8/9/12
to La lista de python en castellano
El 09/08/2012, a las 22:52, Diego Uribe Gamez escribió:

voy a facilitarme las cosas, entonces voy a proximar a su decena mas cercana:

69.9 ---> quedaría en 70

104.5 ---> quedaría en 100

voy a ver lo que me mandaste Jose.

Gracias.

Acabo de recordar la función "round" para no tener que hacer lo del int con la suma de 0.5 dentro.

Si quieres redondear a la decena puedes hacer
round(n/10.)*10
siendo n tu número a aproximar. Por ejemplo:

>>> round(69.9/10.)*10
70.0
>>> round(104.5/10.)*10
100.0

También puedes aproximar como decías antes a la "quincena" más cercana. Por ejemplo:
>>> round(69.9/15.)*15
75.0
>>> round(104.5/15.)*15
105.0

Un saludo.



El 9 de agosto de 2012 16:12, Diego Uribe Gamez <diego.ur...@gmail.com> escribió:
Un saludo a todos, hoy estoy haciendo un código el cual tiene que aproximar un numero genérico a unos números que yo mismo determino como en una linea en x pero la verdad no sabría como hacerlo de forma simple, me explico:

a = 69.9

los números a los que quiero aproximar según este caso son entre 60 y 75.

Estoy trabajando con grados y la idea es aproximar cualquier numero que entre a la formula, aproximar entre estos:

0,15,30,45,60,75,90,105,120,135,150,165,180,210,225,240,255,270

otro ejemplo seria a = 104.5 y la idea seria que lo aproximara al min 90 o al max 105 yo se que es lógico que se aproxime a 105 pero la idea es que lo haga el código en python de forma simple.

Alguna idea?

--
 Diego Alonso Uribe Gamez

Desarrollador web
Twitter: @DiegoUG







--
 Diego Alonso Uribe Gamez

Desarrollador web
Twitter: @DiegoUG




Diego Uribe Gamez

unread,
Aug 9, 2012, 6:28:12 PM8/9/12
to La lista de python en castellano
Muchas gracias, así me sale perfecto:

Si quieres redondear a la decena puedes hacer
round(n/10.)*10
siendo n tu número a aproximar. Por ejemplo:

>>> round(69.9/10.)*10
70.0
>>> round(104.5/10.)*10
100.0

También puedes aproximar como decías antes a la "quincena" más cercana. Por ejemplo:
>>> round(69.9/15.)*15
75.0
>>> round(104.5/15.)*15
105.0

Gracias.
Reply all
Reply to author
Forward
0 new messages