Author |
Topic  |
|
ashvilki
USA
10 Posts |
Posted - 08/26/2003 : 7:26:36 PM
|
Hi, guys! I have a LabTalk script calculating values in a column (MSQRT) from 12 other columns like this:
Col(XX)=col(G)*(-.172)+col(H)*(-.074)+col(I)*.122 +col(J)*.231+col(K)*.239+col(L)*.194+col(A)*.156+col(B)*(-.010); Col(YY)=-(col(G)*(-.057)+col(H)*(-.019)+col(I)*(-.106)+col(J)*(-.022)+col(K)*.041+col(L)*.048+col(A)*(-.227)+col(B)*(.887)); Col(ZZ)=-(col(G)*(.229)+col(H)*(.310)+col(I)*.246+col(J)*.063+col(K)*(-.055)+col(L)*(-.108)+ col(A)*(-.022) + col(B)*(-.102)); Col(MSQRT) = sqrt(Col(XX)^2 + Col(YY)^2 + Col(ZZ)^2);
The worksheet is about 200,000 rows long and it takes forever to calculate. Is there a way to speed it up in Origin C?
Thanks a lot,
Alexei |
|
couturier
France
291 Posts |
Posted - 09/08/2003 : 05:25:52 AM
|
Hi Ashvilki, I can't help you with origin C but maybe you should try the following syntax in Labtalk: col(XX)=col(G); col(XX)*=-.172; col(XX)+=col(H); col(XX)*=-.074; and so on... it's a bit longer to type but should improve the speed.
I hope it'll help |
 |
|
rlewis
Canada
253 Posts |
Posted - 09/08/2003 : 1:53:14 PM
|
Assuming no silly typos .. the following code should work annd be a lot faster than your LabTalk script ... But with 200K rows .. it may also take a while
bool column_calculations(string wksName) { /* It is assumed that a worksheet named wksName exists and that it contains columns A, B, G, H, I, J, K, L, ZZ, YY, ZZ, and Msqrt */ Worksheet wks; if (wks.Attach(wksName)) { Dataset dsA,dsB, dsG, dsH, dsI, dsJ, dsK, dsL, dsXX, dsYY, dsZZ, dsMsqrt; if(dsA.Attach(wksName+"_A") && dsB.Attach(wksName+"_B") && dsG.Attach(wksName+"_G") && dsH.Attach(wksName+"_H") && dsI.Attach(wksName+"_I") && dsJ.Attach(wksName+"_J") && dsK.Attach(wksName+"_K") && dsL.Attach(wksName+"_L") && dsXX.Attach(wksName+"_XX") && dsYY.Attach(wksName+"_YY") && dsZZ.Attach(wksName+"_ZZ") && dsMsqrt.Attach(wksName+"_Msqrt")) { int nRows=dsA.GetSize(); if(nRows==dsB.GetSize() && nRows==dsG.GetSize() && nRows==dsH.GetSize() && nRows==dsI.GetSize() && nRows==dsJ.GetSize() && nRows==dsK.GetSize() && nRows==dsL.GetSize()) { dsXX.SetSize(nRows); dsYY.SetSize(nRows); dsZZ.SetSize(nRows); dsMsqrt.SetSize(nRows); vector vA, vB, vG, vH, vI, vJ, vK, vL, vsX, vsY, vsZ; vA.SetSize(nRows); vB.SetSize(nRows); vG.SetSize(nRows); vH.SetSize(nRows); vI.SetSize(nRows); vJ.SetSize(nRows); vK.SetSize(nRows); vL.SetSize(nRows); vsX.SetSize(nRows); vsY.SetSize(nRows); vsZ.SetSize(nRows); // calculating Col(XX) values vA=dsA*(0.156); vB=dsB*(-0.10); vG=dsG*(-0.172); vH=dsH*(-0.074); vI=dsI*(0.122); vJ=dsJ*(0.231); vK=dsK*(0.239); vL=dsL*(0.194); dsXX=vA; dsXX+=vB; dsXX+=vG; dsXX+=vH; dsXX+=vI; dsXX+=vJ; dsXX+=vK; dsXX+=vL; // calculating col(YY) values vA=dsA*(-0.227); vB=dsB*(0.887); vG=dsG*(-0.057); vH=dsH*(-0.019); vI=dsI*(-0.106); vJ=dsJ*(-0.022); vK=dsK*(0.41); vL=dsL*(0.048); dsYY=vA; dsXX+=vB; dsXX-=vG; dsXX+=vH; dsXX+=vI; dsXX+=vJ; dsXX+=vK; dsXX+=vL; // calculating col(ZZ) values vA=dsA*(-0.022); vB=dsB*(-0.102); vG=dsG*(0.229); vH=dsH*(0.310); vI=dsI*(0.246); vJ=dsJ*(0.063); vK=dsK*(-0.055); vL=dsL*(-0.108); dsYY=vA; dsXX+=vB; dsXX-=vG; dsXX+=vH; dsXX+=vI; dsXX+=vJ; dsXX+=vK; dsXX+=vL; vsX=dsXX; vsX*=vsX; vsY=dsYY; vsY*=vsY; vsZ=dsZZ; vsZ*=vsZ; dsMsqrt=vsX; dsMsqrt+=vsY; dsMsqrt+=vsZ; dsMsqrt=sqrt(dsMsqrt); return (true); } } } return (false); } |
 |
|
rlewis
Canada
253 Posts |
Posted - 09/08/2003 : 2:17:48 PM
|
Scratch my last post ... There are a few silly typos therein ... Hopefully, I've found them all ...
bool column_calculations(string wksName) { /* It is assumed that a worksheet named wksName exists and that it contains columns A, B, G, H, I, J, K, L, ZZ, YY, ZZ, and Msqrt */ Worksheet wks; if (wks.Attach(wksName)) { Dataset dsA,dsB, dsG, dsH, dsI, dsJ, dsK, dsL, dsXX, dsYY, dsZZ, dsMsqrt; if(dsA.Attach(wksName+"_A") && dsB.Attach(wksName+"_B") && dsG.Attach(wksName+"_G") && dsH.Attach(wksName+"_H") && dsI.Attach(wksName+"_I") && dsJ.Attach(wksName+"_J") && dsK.Attach(wksName+"_K") && dsL.Attach(wksName+"_L") && dsXX.Attach(wksName+"_XX") && dsYY.Attach(wksName+"_YY") && dsZZ.Attach(wksName+"_ZZ") && dsMsqrt.Attach(wksName+"_Msqrt")) { int nRows=dsA.GetSize(); if(nRows==dsB.GetSize() && nRows==dsG.GetSize() && nRows==dsH.GetSize() && nRows==dsI.GetSize() && nRows==dsJ.GetSize() && nRows==dsK.GetSize() && nRows==dsL.GetSize()) { dsXX.SetSize(nRows); dsYY.SetSize(nRows); dsZZ.SetSize(nRows); dsMsqrt.SetSize(nRows); vector vA, vB, vG, vH, vI, vJ, vK, vL, vsX, vsY, vsZ; vA.SetSize(nRows); vB.SetSize(nRows); vG.SetSize(nRows); vH.SetSize(nRows); vI.SetSize(nRows); vJ.SetSize(nRows); vK.SetSize(nRows); vL.SetSize(nRows); vsX.SetSize(nRows); vsY.SetSize(nRows); vsZ.SetSize(nRows); // calculating Col(XX) values vA=dsA*(0.156); vB=dsB*(-0.10); vG=dsG*(-0.172); vH=dsH*(-0.074); vI=dsI*(0.122); vJ=dsJ*(0.231); vK=dsK*(0.239); vL=dsL*(0.194); dsXX=vA; dsXX+=vB; dsXX+=vG; dsXX+=vH; dsXX+=vI; dsXX+=vJ; dsXX+=vK; dsXX+=vL; // calculating col(YY) values vA=dsA*(-0.227); vB=dsB*(0.887); vG=dsG*(-0.057); vH=dsH*(-0.019); vI=dsI*(-0.106); vJ=dsJ*(-0.022); vK=dsK*(0.41); vL=dsL*(0.048); dsYY=vA; dsYY+=vB; dsYY-=vG; dsYY+=vH; dsYY+=vI; dsYY+=vJ; dsYY+=vK; dsYY+=vL; // calculating col(ZZ) values vA=dsA*(-0.022); vB=dsB*(-0.102); vG=dsG*(0.229); vH=dsH*(0.310); vI=dsI*(0.246); vJ=dsJ*(0.063); vK=dsK*(-0.055); vL=dsL*(-0.108); dsZZ=vA; dsZZ+=vB; dsZZ-=vG; dsZZ+=vH; dsZZ+=vI; dsZZ+=vJ; dsZZ+=vK; dsZZ+=vL; vsX=dsXX; vsX*=vsX; vsY=dsYY; vsY*=vsY; vsZ=dsZZ; vsZ*=vsZ; dsMsqrt=vsX; dsMsqrt+=vsY; dsMsqrt+=vsZ; dsMsqrt=sqrt(dsMsqrt); return (true); } } } return (false); } |
 |
|
|
Topic  |
|
|
|