2014-04-06 23:24 GMT+02:00 AGTUGO <agt...@gmail.com>:

> size_sample = 1e7
> x = np.random.uniform(0,1,size_sample)
> y = np.random.uniform(0,1,size_sample)
>

Los números aleatorios que generas no son importantes, son solo un medio
para un fin. Escribirlos en disco (Pytables, mmap, swap...) es un gasto
innecesario. La única razón por la que quieres hacerlo en paralelo es para
aprovecharte de la vectorización de Numpy; por tanto sólo tiene sentido
usar tamaños en los que puedas usarlo.

import numexpr as ne
import numpy as np

total_number = 1e8
size_sample = 1e6

condition_true = 0
for _ in xrange(int(np.ceil(total_number / size_sample))):
    x = np.random.uniform(0, 1, size_sample)
    y = np.random.uniform(0, 1, size_sample)
    condition_true += ne.evaluate('sum(abs(x * x + y * y < 1))')

print condition_true / total_number

Numexpr está ahí para paralelizar la expresión y optimizar el acceso a
memoria y la caché de la CPU (útil en este caso, quizá no tanto en otros
más complicados).


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

Responder a