encrucijada Python / Pascal

Francesc Alted falted en openlc.org
Vie Mayo 2 11:33:39 CEST 2003


A Dijous 01 Maig 2003 01:11, Andrés A. Rocchia va escriure:
>  Hola, soy estudiante de Ing. Civil y en este semestre estoy
> tomando un curso de Análisis Numérico en el cual se requieren
> hacer algunos programas sencillos.
>
>  Mis conocimientos de programación son muy básicos y solo eh
> intentado algo en Pascal.
>
> Como me interesa aprenden un lenguaje algo mas moderno me pareció
> buena idea probar con Python pero estoy ante la encrucijada
> de si no seguir con Pascal ya que no encuentro la manera de
> resolver el inconveniente que les presento a continuación.
>
> Bien debido a que necesito estimar errores en los algoritmos
> utilizados, a menudo se requiere ejecutar un mismo algoritmo
> utilizando distinta precisión en los cálculos, esto último en
> Pascal lo puedo hacer utilizando los tipos single y double para
> las distintas variables y por lo tanto obtener así la diferente
> precisión deseada.

Esto lo puedes hacer perfectamente con Python y Numeric. Python por si solo
sólo trabaja con precisión doble, pero Numeric acepta un conjunto muy rico
de tipos.

Te adjunto un pequeño ejemplo para que veas su potencia:

inspiron:~$ python
Python 2.2.2 (#3, Dec 26 2002, 16:40:05)
[GCC 2.95.4 20011002 (Debian prerelease)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from Numeric import *
>>> a=array([1,2,3,4],'d')
>>> b=array([0,1,2,3],'d')
>>> a+b
array([ 1.,  3.,  5.,  7.])
>>> a*b
array([  0.,   2.,   6.,  12.])
>>> b=array([0,1,2,3],'f')
>>> a=array([1,2,3,4],'f')
>>> a*b
array([  0.,   2.,   6.,  12.],'f')
>>> a+b
array([ 1.,  3.,  5.,  7.],'f')
>>>

como ves, cuando creas arrays con Numeric sólo has de decirle de qué tipo
son (el defecto es siempre doble precision, como buen paquete científico que
es). 'd' es para doble precisión y 'f' para simple. Después puedes hacer
todo tipo de operaciones con ellos, yo sólo te enseño la suma y la
multiplicación, pero la libreria de funciones (ufuncs) es muy grande.
Numeric también soporta escalares, no sólo arrays.

La documentación de Numeric está muy bien:
http://www.pfdubois.com/numpy/numpy.pdf

Otra posibilidad es que empieces a usar numarray
(http://stsdas.stsci.edu/numarray/), la nueva generación de Numeric, que ya
es *muy* estable. Está a punto de salir la versión 0.5, posiblemente la
semana que viene, y, aunque el "modus operandi" es muy similar al de
Numeric, el manejo de tipos de datos es, en mi opinión, más claro.

Saludos,

-- 
Francesc Alted




Más información sobre la lista de distribución Python-es