Here are some hints:

http://stackoverflow.com/questions/10580676/comparing-two-numpy-arrays-for-equality

It would be the timing of:

numpy.allclose
http://docs.scipy.org/doc/numpy/reference/generated/numpy.allclose.html

numpy.isclose
http://docs.scipy.org/doc/numpy/reference/generated/numpy.isclose.html#numpy.isclose

numpy.ma
http://docs.scipy.org/doc/numpy/reference/generated/numpy.ma.masked_values.html#numpy.ma.masked_values


2014-06-10 11:57 GMT+02:00 Troels Emtekær Linnet <[email protected]>:
> Hi Edward.
>
> I thought the same.
>
> One could send in a ones and zeros numpy array in function.
> Set them to standard to None.
>
> If they are None, then create them.
>
> One can see on the timings, that
> r2eff_CR72
> numeric.py:2056(allclose)
>
> are the most time consuming.
> Maybe there is a faster way for allclose.
> Masking ???
>
>
>         1    0.000    0.000    2.084    2.084 <string>:1(<module>)
>         1    0.002    0.002    2.084    2.084 profiling_cr72.py:441(cluster)
>      1000    0.002    0.000    2.005    0.002 profiling_cr72.py:405(calc)
>      1000    0.034    0.000    2.003    0.002
> relax_disp.py:995(func_CR72_full)
>      1000    0.141    0.000    1.960    0.002
> relax_disp.py:524(calc_CR72_chi2)
>      1300    1.100    0.001    1.676    0.001 cr72.py:101(r2eff_CR72)
>      4300    0.245    0.000    0.507    0.000 numeric.py:2056(allclose)
>      3000    0.037    0.000    0.164    0.000 shape_base.py:761(tile)
>     17828    0.126    0.000    0.126    0.000 {method 'reduce' of
> 'numpy.ufunc' objects}
>      4000    0.110    0.000    0.110    0.000 {method 'repeat' of
> 'numpy.ndarray' objects}
>      8609    0.011    0.000    0.086    0.000 fromnumeric.py:1762(any)
>
>
>
>
>
> 2014-06-10 11:44 GMT+02:00 Edward d'Auvergne <[email protected]>:
>
>> Hi Troels,
>>
>> For speed, maybe you should send in the single value parameters
>> together with the array versions into the lib.dispersion modules?  The
>> check:
>>
>> +        if np.allclose(dw, np.zeros(dw.shape)) or np.allclose(pA,
>> np.ones(dw.shape)) or np.allclose(kex, np.zeros(dw.shape)):
>>
>> will be very expensive.
>>
>> Regards,
>>
>> Edward
>>
>>
>>
>> On 8 June 2014 19:48,  <[email protected]> wrote:
>> > Author: tlinnet
>> > Date: Sun Jun  8 19:48:35 2014
>> > New Revision: 23737
>> >
>> > URL: http://svn.gna.org/viewcvs/relax?rev=23737&view=rev
>> > Log:
>> > Re-implemented safety checks in lib/dispersion/cr72.py.
>> >
>> > This is now implemented for both rank-1 float array and of higher
>> > dimensions.
>> >
>> > This makes the unit tests pass for multi dimensional computing.
>> >
>> > Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion
>> > models for Clustered analysis.
>> >
>> > Modified:
>> >     branches/disp_spin_speed/lib/dispersion/cr72.py
>> >
>> > Modified: branches/disp_spin_speed/lib/dispersion/cr72.py
>> > URL:
>> > http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/dispersion/cr72.py?rev=23737&r1=23736&r2=23737&view=diff
>> >
>> > ==============================================================================
>> > --- branches/disp_spin_speed/lib/dispersion/cr72.py     (original)
>> > +++ branches/disp_spin_speed/lib/dispersion/cr72.py     Sun Jun  8
>> > 19:48:35 2014
>> > @@ -128,9 +128,15 @@
>> >          rank_1 = False
>> >
>> >      # Catch parameter values that will result in no exchange, returning
>> > flat R2eff = R20 lines (when kex = 0.0, k_AB = 0.0).
>> > +    # For rank-1 float array.
>> >      if rank_1:
>> >          if dw == 0.0 or pA == 1.0 or kex == 0.0:
>> >              back_calc[:] = array([r20a]*num_points)
>> > +            return
>> > +    # For higher dimensions, return same structure.
>> > +    else:
>> > +        if np.allclose(dw, np.zeros(dw.shape)) or np.allclose(pA,
>> > np.ones(dw.shape)) or np.allclose(kex, np.zeros(dw.shape)):
>> > +            back_calc[:] = r20a
>> >              return
>> >
>> >      # The B population.
>> > @@ -165,16 +171,23 @@
>> >
>> >      # Catch math domain error of cosh(val > 710).
>> >      # This is when etapos > 710.
>> > -    if rank_1:
>> > -        if max(etapos) > 700:
>> > +    if max(etapos) > 700:
>> > +        if rank_1:
>> >              back_calc[:] = array([r20a]*num_points)
>> > +            return
>> > +        # For higher dimensions, return same structure.
>> > +        else:
>> > +            back_calc[:] = r20a
>> >              return
>> >
>> >      # The arccosh argument - catch invalid values.
>> >      fact = Dpos * cosh(etapos) - Dneg * cos(etaneg)
>> > -    if rank_1:
>> > -        if min(fact) < 1.0:
>> > +    if min(fact) < 1.0:
>> > +        if rank_1:
>> >              back_calc[:] = array([r20_kex]*num_points)
>> > +            return
>> > +        else:
>> > +            back_calc[:] = r20_kex
>> >              return
>> >
>> >      # Calculate R2eff.
>> > @@ -182,8 +195,10 @@
>> >
>> >      # Catch errors, taking a sum over array is the fastest way to check
>> > for
>> >      # +/- inf (infinity) and nan (not a number).
>> > -    if rank_1:
>> > -        if not isfinite(sum(R2eff)):
>> > +    if not isfinite(sum(R2eff)):
>> > +        if rank_1:
>> >              R2eff = array([1e100]*num_points)
>> > +        else:
>> > +            R2eff = np.ones(R2eff.shape) * 1e100
>> >
>> >      back_calc[:] = R2eff
>> >
>> >
>> > _______________________________________________
>> > relax (http://www.nmr-relax.com)
>> >
>> > This is the relax-commits mailing list
>> > [email protected]
>> >
>> > To unsubscribe from this list, get a password
>> > reminder, or change your subscription options,
>> > visit the list information page at
>> > https://mail.gna.org/listinfo/relax-commits
>>
>> _______________________________________________
>> relax (http://www.nmr-relax.com)
>>
>> This is the relax-devel mailing list
>> [email protected]
>>
>> To unsubscribe from this list, get a password
>> reminder, or change your subscription options,
>> visit the list information page at
>> https://mail.gna.org/listinfo/relax-devel
>
>

_______________________________________________
relax (http://www.nmr-relax.com)

This is the relax-devel mailing list
[email protected]

To unsubscribe from this list, get a password
reminder, or change your subscription options,
visit the list information page at
https://mail.gna.org/listinfo/relax-devel

Reply via email to