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 <[email protected]>: > 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 <[email protected]>: >> 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, <[email protected]> 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 >>> [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

