[SciPy-User] Avoiding inner for loops??

J. David Lee johnl@cs.wisc....
Sun Aug 19 09:22:19 CDT 2012


Hi Martin,

It looks like you are trying to do a brute force minimization of your 
model with three parameters, is that right? For that you could look at 
scipy.optimize.brute, which will probably be faster. scipy.optimize also 
has several more sophisticated minimizers that you might  consider:

http://docs.scipy.org/doc/scipy/reference/optimize.html

If your function works with numpy arrays, you could try generating all 
of your parameters at once with mgrid and calling your function on the 
returned arrays,

p1, p2, p3 = np.mgrid[:10,:10,:10]

David

On 08/19/2012 04:07 AM, 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/20120819/6bf587e3/attachment.html 


More information about the SciPy-User mailing list