[SciPy-User] Avoiding inner for loops??

Luuk van der Velden l.j.j.vandervelden at gmail.com
Sat Dec 22 10:35:42 EST 2012


Consider using broadcasting to three 3D parameters matrices (A,B,C), then 
creating a 'ufunc' that takes three parameter at a time (a,b,c) for every 
identical position in the three arrays (A,B,C). So giving the broadcasting 
arrays as input to a ufunction which maps the model function on the three 
paramater arrays.

greets,
Luuk 

On Sunday, August 19, 2012 11:07:59 AM UTC+2, Martin De Kauwe wrote:
>
> Hi, 
>
> I need to avoid (at least) two inner for loops in what I am trying to do 
> otherwise my processing takes forever. What is the best way to transfer 
> what I am doing into a more "numpy way"? Essentially I am trying to call a 
> model again for various different parameter combinations. The example is 
> fictional, by the grid_size would ideally grow > 500 and by doing so the 
> processing speed becomes very slow the way I have set things up.. 
>
> thanks. 
>
> example. 
>
>
> import numpy as np 
>
> def fake_model(data1, data2, p1, p2, p3): 
>     """ complete nonsense """ 
>     return data1 + data2 * p1 * p2 * p3 
>
> data1 = np.random.rand(10) # the size of this arrays varies might be 10 
> might be 15 etc 
> data2 = np.random.rand(10) # the size of this arrays varies might be 10 
> might be 15 etc 
> obs = np.random.rand(10) # the size of this arrays varies might be 10 
> might be 15 etc 
>
> grid_size = 10 # Ideally this would be a large number 
> param1 = np.linspace(5.0, 350, grid_size) 
> param2 = np.linspace(5.0, 550, grid_size) 
> param3 = np.linspace(1E-8, 10.5, grid_size) 
> ss = np.zeros(0) 
>
> for p1 in param1: 
>     for p2 in param2: 
>         for p3 in param3: 
>             ans = fake_model(data1, data2, p1, p2, p3) 
>             
>             ss = np.append(ss, np.sum(obs - ans)**2) 
>             print np.sum(obs - ans)**2
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.scipy.org/pipermail/scipy-user/attachments/20121222/56d83158/attachment.html>


More information about the SciPy-User mailing list