These could also be called matrix_exponential_rank_NE_NS_NM_NO_ND_x_x(), or what ever you wish.
Regards, Edward On 23 June 2014 11:09, Edward d'Auvergne <[email protected]> wrote: > Hi Troels, > > There is a faster way to do this - eliminating the 'if' statements. I > don't know how much faster though, as it is clearly currently not a > bottleneck, but it might cause the code to be much faster later when > other changes to the numeric models occur. What would be better is to > duplicate and rename the function into the matrix_exponential_rank6() > and matrix_exponential_rank7() functions. It is more code, but it > will be faster as it will be less lines per function. If you do this, > for stability it would be good to first have unit tests for the rank 6 > and 7 structures. > > Regards, > > Edward > > > > On 20 June 2014 09:38, <[email protected]> wrote: >> Author: tlinnet >> Date: Fri Jun 20 09:38:33 2014 >> New Revision: 24192 >> >> URL: http://svn.gna.org/viewcvs/relax?rev=24192&view=rev >> Log: >> Made the function matrix_exponential_rankN also find the exponential if the >> experiments indices are missing. >> >> Task #7807 (https://gna.org/task/index.php?7807): Speed-up of dispersion >> models for Clustered analysis. >> >> Modified: >> branches/disp_spin_speed/lib/linear_algebra/matrix_exponential.py >> >> Modified: branches/disp_spin_speed/lib/linear_algebra/matrix_exponential.py >> URL: >> http://svn.gna.org/viewcvs/relax/branches/disp_spin_speed/lib/linear_algebra/matrix_exponential.py?rev=24192&r1=24191&r2=24192&view=diff >> ============================================================================== >> --- branches/disp_spin_speed/lib/linear_algebra/matrix_exponential.py >> (original) >> +++ branches/disp_spin_speed/lib/linear_algebra/matrix_exponential.py Fri >> Jun 20 09:38:33 2014 >> @@ -68,7 +68,13 @@ >> @rtype: numpy float array of rank [NE][NS][NM][NO][ND][X][X] >> """ >> >> - NE, NS, NM, NO, ND, Row, Col = A.shape >> + # Set initial to None. >> + NE, NS, NM, NO, ND, Row, Col = None, None, None, None, None, None, None >> + >> + if len(A.shape) == 7: >> + NE, NS, NM, NO, ND, Row, Col = A.shape >> + elif len(A.shape) == 6: >> + NS, NM, NO, ND, Row, Col = A.shape >> >> # Is the original matrix real? >> complex_flag = any(iscomplex(A)) >> @@ -84,10 +90,16 @@ >> >> # Calculate the exponential of all elements in the input array. Shape >> [NE][NS][NM][NO][ND][X] >> # Add one axis, to allow for broadcasting multiplication. >> - W_exp = exp(W).reshape(NE, NS, NM, NO, ND, Row, 1) >> + if NE == None: >> + W_exp = exp(W).reshape(NS, NM, NO, ND, Row, 1) >> + else: >> + W_exp = exp(W).reshape(NE, NS, NM, NO, ND, Row, 1) >> >> # Make a eye matrix, with Shape [NE][NS][NM][NO][ND][X][X] >> - eye_mat = tile(eye(Row)[newaxis, newaxis, newaxis, newaxis, newaxis, >> ...], (NE, NS, NM, NO, ND, 1, 1) ) >> + if NE == None: >> + eye_mat = tile(eye(Row)[newaxis, newaxis, newaxis, newaxis, >> newaxis, ...], (NS, NM, NO, ND, 1, 1) ) >> + else: >> + eye_mat = tile(eye(Row)[newaxis, newaxis, newaxis, newaxis, >> newaxis, ...], (NE, NS, NM, NO, ND, 1, 1) ) >> >> # Transform it to a diagonal matrix, with elements from vector down the >> diagonal. >> W_exp_diag = multiply(W_exp, eye_mat ) >> >> >> _______________________________________________ >> 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

