Hmmm, it sounds like a documentation bug.  It looks like the Fortran
memory ordering is required for the out argument to work when the a or
b arguments are the same structure:

http://thread.gmane.org/gmane.comp.python.numeric.general/28135/focus=28826

That's from the same thread.  From this thread
http://mail.scipy.org/pipermail/numpy-discussion/2013-May/066668.html,
it looks like the NumPy people, or those who responded, do not
understand this concept.  I'll keep searching.

Cheers,

Edward



On 15 June 2014 17:00, Troels Emtekær Linnet <[email protected]> wrote:
> There is long thread here
> http://thread.gmane.org/gmane.comp.python.numeric.general/28135/
>
> Somewhere I saw, that there is maybe a bug here.
>
>
> 2014-06-15 16:53 GMT+02:00 Edward d'Auvergne <[email protected]>:
>
>> Hi,
>>
>> It does look like there is a bug somewhere in one version of
>> numpy.dot().  I'll look into this!
>>
>> Regards,
>>
>> Edward
>>
>>
>>
>> On 15 June 2014 16:43, Troels Emtekær Linnet <[email protected]>
>> wrote:
>> > I am using 1.8
>> >
>> > I am stopping here with more search for this holy grail.
>> >
>> > There is clearly some bug somewhere.
>> >
>> >
>> > 2014-06-15 16:25 GMT+02:00 Edward d'Auvergne <[email protected]>:
>> >
>> >> Which numpy version are you using?  There is a damn good reason why I
>> >> am pushing this.  I know that all of the competition software (at
>> >> least cpmg_fit and CATIA) uses exactly this storage concept, though in
>> >> C rather than Python, and for exactly the reason why I am pushing
>> >> this.  We really have to get this working for you!
>> >>
>> >> Regards,
>> >>
>> >> Edward
>> >>
>> >>
>> >>
>> >> On 15 June 2014 16:21, Troels Emtekær Linnet <[email protected]>
>> >> wrote:
>> >> > Hi Ed.
>> >> >
>> >> > I can see that you are pushing for this.
>> >> >
>> >> > It wont work!
>> >> >
>> >> >
>> >> >
>> >> > 2014-06-15 16:12 GMT+02:00 Edward d'Auvergne <[email protected]>:
>> >> >>
>> >> >> Hi Troels,
>> >> >>
>> >> >> In this change, only in one line have you used the numpy.dot() out
>> >> >> argument:
>> >> >>
>> >> >> +                dot(Rexpo, r180x, evolution_matrix)
>> >> >>
>> >> >> So it must be working.  You can do this for all others, replacing:
>> >> >>
>> >> >> -                evolution_matrix = dot(evolution_matrix, Rexpo)
>> >> >> +                 dot(evolution_matrix, Rexpo, evolution_matrix)
>> >> >>
>> >> >> and:
>> >> >>
>> >> >> -                evolution_matrix = dot(evolution_matrix,
>> >> >> evolution_matrix)
>> >> >> +                dot(evolution_matrix, evolution_matrix,
>> >> >> evolution_matrix)
>> >> >>
>> >> >> and:
>> >> >>
>> >> >> -                    Mint = evolution_matrix.dot(Mint)
>> >> >> +                    dot(evolution_matrix, Mint, Mint)
>> >> >>
>> >> >> This should give an observable speed increase of 2 or more.
>> >> >>
>> >> >> Regards,
>> >> >>
>> >> >> Edward
>> >> >>
>> >> >>
>> >> >> On 15 June 2014 15:15,  <[email protected]> wrote:
>> >> >> > Author: tlinnet
>> >> >> > Date: Sun Jun 15 15:15:23 2014
>> >> >> > New Revision: 23963
>> >> >> >
>> >> >> > URL: http://svn.gna.org/viewcvs/relax?rev=23963&view=rev
>> >> >> > Log:
>> >> >> > Made the dot evolution structure faster for NS CPMG 2site 3D.
>> >> >> >
>> >> >> > Task #7807 (https://gna.org/task/index.php?7807): Speed-up of
>> >> >> > dispersion
>> >> >> > models for Clustered analysis.
>> >> >> >
>> >> >> > Modified:
>> >> >> >     branches/disp_spin_speed/lib/dispersion/ns_cpmg_2site_3d.py
>> >> >> >
>> >> >> > Modified:
>> >> >> > branches/disp_spin_speed/lib/dispersion/ns_cpmg_2site_3d.py
>> >> >> > URL:
>> >> >> >
>> >> >> >
>> >> >> > http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/dispersion/ns_cpmg_2site_3d.py?rev=23963&r1=23962&r2=23963&view=diff
>> >> >> >
>> >> >> >
>> >> >> >
>> >> >> > ==============================================================================
>> >> >> > --- branches/disp_spin_speed/lib/dispersion/ns_cpmg_2site_3d.py
>> >> >> > (original)
>> >> >> > +++ branches/disp_spin_speed/lib/dispersion/ns_cpmg_2site_3d.py
>> >> >> > Sun
>> >> >> > Jun
>> >> >> > 15 15:15:23 2014
>> >> >> > @@ -54,7 +54,7 @@
>> >> >> >  """
>> >> >> >
>> >> >> >  # Python module imports.
>> >> >> > -from numpy import dot, fabs, isfinite, log, min, sum
>> >> >> > +from numpy import asarray, dot, fabs, isfinite, log, min, sum
>> >> >> >  from numpy.ma import fix_invalid, masked_where
>> >> >> >
>> >> >> >
>> >> >> > @@ -141,6 +141,9 @@
>> >> >> >              # The matrix R that contains all the contributions to
>> >> >> > the
>> >> >> > evolution, i.e. relaxation, exchange and chemical shift evolution.
>> >> >> >              R = rcpmg_3d(R1A=r10a, R1B=r10b, R2A=R2A_si_mi,
>> >> >> > R2B=R2B_si_mi, pA=pA, pB=pB, dw=dw_si_mi, k_AB=k_AB, k_BA=k_BA)
>> >> >> >
>> >> >> > +            # The essential evolution matrix. This initialises
>> >> >> > the
>> >> >> > structure.
>> >> >> > +            evolution_matrix = asarray(R) * 0.0
>> >> >> > +
>> >> >> >              # Loop over the time points, back calculating the
>> >> >> > R2eff
>> >> >> > values.
>> >> >> >              for di in range(num_points_si_mi):
>> >> >> >                  # Extract the values from the higher dimensional
>> >> >> > arrays.
>> >> >> > @@ -155,12 +158,18 @@
>> >> >> >                  # This matrix is a propagator that will evolve
>> >> >> > the
>> >> >> > magnetization with the matrix R for a delay tcp.
>> >> >> >                  Rexpo = matrix_exponential(R*tcp_si_mi_di)
>> >> >> >
>> >> >> > -                # Temp matrix.
>> >> >> > -                t_mat =
>> >> >> >
>> >> >> >
>> >> >> > Rexpo.dot(r180x).dot(Rexpo).dot(Rexpo).dot(r180x).dot(Rexpo).dot(Rexpo).dot(r180x).dot(Rexpo).dot(Rexpo).dot(r180x).dot(Rexpo)
>> >> >> > +                # The essential evolution matrix.
>> >> >> > +                # This is the first round.
>> >> >> > +                dot(Rexpo, r180x, evolution_matrix)
>> >> >> > +                evolution_matrix = dot(evolution_matrix, Rexpo)
>> >> >> > +                # The second round.
>> >> >> > +                evolution_matrix = dot(evolution_matrix,
>> >> >> > evolution_matrix)
>> >> >> > +                # The third and fourth round,
>> >> >> > +                evolution_matrix = dot(evolution_matrix,
>> >> >> > evolution_matrix)
>> >> >> >
>> >> >> >                  # Loop over the CPMG elements, propagating the
>> >> >> > magnetisation.
>> >> >> >                  for j in range(power_si_mi_di/2):
>> >> >> > -                    Mint = t_mat.dot(Mint)
>> >> >> > +                    Mint = evolution_matrix.dot(Mint)
>> >> >> >
>> >> >> >                  # The next lines calculate the R2eff using a
>> >> >> > two-point
>> >> >> > approximation, i.e. assuming that the decay is mono-exponential.
>> >> >> >                  Mx = Mint[1] / pA
>> >> >> >
>> >> >> >
>> >> >> > _______________________________________________
>> >> >> > 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