mailRe: r23788 - /branches/disp_spin_speed/target_functions/relax_disp.py


Others Months | Index by Date | Thread Index
>>   [Date Prev] [Date Next] [Thread Prev] [Thread Next]

Header


Content

Posted by Troels Emtekær Linnet on June 10, 2014 - 18:03:
Hi Ed.

Well, I have before been limited to the old RHEL standard libraries
'1.4.1' from yum.

Our server admin refuses to install any non-standard packages to our
computation server.

This is very very logic, since you often end up in a big fight, if
start opening up for this.

But, I had just a very big success with a Canopy installation.
http://wiki.nmr-relax.com/Epd_canopy

This essential lets the user install a local python if wanted.
And let the admin make a shared installation.

Our server admin can accept this solution, since it does not interfere
with the package manager.

So numpy is now '1.8.0'. :-)

best
Troels



2014-06-10 17:50 GMT+02:00 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi,

I haven't seen HBO's "Silicon Valley" yet.  But you should soon reach
tip-to-tip efficiency with both relax and your Python programming
skills.  Anyway, I'm thinking that the numpy version minimal number
will need to be increased to 1.6.2.  This really depends on how much
users complain though.  Most stay reasonably up to date so that the
current 1.0.4 at http://www.nmr-relax.com/download.html is never
encountered anyway.  The test suite should pull out the relax users
with too old versions.  I am also using lib.compat for some of these
version issues, as there is always a less efficient way of performing
the operation using an older numpy version.  Do you have any opinions
for the minimum version number?  Which versions do you have installed
on your various systems?

Regards,

Edward



On 10 June 2014 17:40, Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx> wrote:
Hi Ed.

I worry about, if I use some numpy things, which is of to high a version?
What is the "relax" limit on this?

Best
Troels


2014-06-10 17:27 GMT+02:00 Troels Emtekær Linnet <tlinnet@xxxxxxxxxxxxx>:
I have learned SO much these days!!!

Class programming.
How numpy arrays work together, and broadcasts.
How to profile and make efficiency.

I feel like in HBO "Silicon Valley":
http://en.wikipedia.org/wiki/Silicon_Valley_%28TV_series%29

Episode 8, "Optimal Tip-to-Tip Efficiency", is exactly what is
happening right now. :-)

best
Troels

2014-06-10 17:04 GMT+02:00 Edward d'Auvergne <edward@xxxxxxxxxxxxx>:
Hi Troels,

Is it possible to shift the mask_replace part into __init__()?  That
might give more speed ups.  I'm not so familiar with numpy masks, so I
couldn't have helped you with that.  Anyway, those 4 hours invested is
guaranteed to save you much more than 4 hours when you use this later.

Regards,

Edward



On 10 June 2014 16:51,  <tlinnet@xxxxxxxxxxxxx> wrote:
Author: tlinnet
Date: Tue Jun 10 16:51:33 2014
New Revision: 23788

URL: http://svn.gna.org/viewcvs/relax?rev=23788&view=rev
Log:
Implemented a masked array search for where "missing" array is equal 1.

This makes it possible to replace all values with this mask, from the 
value array.

This eliminates the last loops over the missing values.

It took over 4 hours to figure out, that the mask should be called with 
mask.mask,
to return the same fulls structure,

Task #7807 (https://gna.org/task/index.php?7807): Speed-up of 
dispersion models for Clustered analysis.

Modified:
    branches/disp_spin_speed/target_functions/relax_disp.py

Modified: branches/disp_spin_speed/target_functions/relax_disp.py
URL: 
http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/target_functions/relax_disp.py?rev=23788&r1=23787&r2=23788&view=diff
==============================================================================
--- branches/disp_spin_speed/target_functions/relax_disp.py     
(original)
+++ branches/disp_spin_speed/target_functions/relax_disp.py     Tue Jun 
10 16:51:33 2014
@@ -29,6 +29,7 @@
 from math import pi
 from numpy import array, asarray, complex64, dot, float64, int16, max, 
ones, sqrt, sum, zeros
 import numpy as np
+from numpy.ma import masked_equal

 # relax module imports.
 from lib.dispersion.b14 import r2eff_B14
@@ -418,6 +419,7 @@
             # The number of disp point can change per spectrometer, so 
we make the maximum size.
             self.values_a = deepcopy(self.zeros_a)
             self.errors_a = deepcopy(self.ones_a)
+            self.missing_a = zeros(self.numpy_array_shape)

             self.cpmg_frqs_a = deepcopy(self.ones_a)
             self.num_disp_points_a = deepcopy(self.zeros_a)
@@ -456,6 +458,7 @@
                             for di in 
range(self.num_disp_points[ei][si][mi][oi]):
                                 if self.missing[ei][si][mi][oi][di]:
                                     self.has_missing = True
+                                    self.missing_a[ei][si][mi][oi][di] 
= 1.0

             # Make copy of values structure.
             self.back_calc_a = deepcopy(self.values_a)
@@ -574,15 +577,11 @@

         ## For all missing data points, set the back-calculated value 
to the measured values so that it has no effect on the chi-squared 
value.
         if self.has_missing:
-            # Loop over the spins.
-            for si in range(self.num_spins):
-                # Loop over the spectrometer frequencies.
-                for mi in range(self.num_frq):
-                    # Loop over the dispersion points.
-                    for di in 
range(self.num_disp_points[0][si][mi][0]):
-                        if self.missing[0][si][mi][0][di]:
-                            #self.back_calc[0][si][mi][0][di] = 
self.values[0][si][mi][0][di]
-                            self.back_calc_a[0][si][mi][0][di] = 
self.values[0][si][mi][0][di]
+            # Find the numpy mask, which tells where values should be 
replaced.
+            mask_replace = masked_equal(self.missing_a, 1.0)
+
+            # Replace with values.
+            self.back_calc_a[mask_replace.mask] = 
self.values_a[mask_replace.mask]

         ## Calculate the chi-squared statistic.
         return sum((1.0 / self.errors_a * (self.values_a - 
self.back_calc_a))**2)


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

This is the relax-commits mailing list
relax-commits@xxxxxxx

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
relax-devel@xxxxxxx

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



Related Messages


Powered by MHonArc, Updated Tue Jun 10 18:20:14 2014