From 3f790091275dcb1c3132f414c70581f2f9d27891 Mon Sep 17 00:00:00 2001 From: Recolic Keghart <root@recolic.net> Date: Tue, 5 Dec 2017 13:30:30 +0800 Subject: [PATCH] Add inverse --- __pycache__/quickmap.cpython-36.pyc | Bin 2519 -> 2846 bytes quickmap.py | 23 ++++++++++++++++------- test.py | 3 +-- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/__pycache__/quickmap.cpython-36.pyc b/__pycache__/quickmap.cpython-36.pyc index 5941b8d85c574f82e1cb81064e894656e422ef5d..25d45a96a0002e31058294169d422e749b843198 100644 GIT binary patch delta 1019 zcmZuw&1(}u6rZ=VyV-1#&DS<*V{6l@rK#E?7DQ;FhY}G#5Q~rm6;dX}ZPRU;45h*> zIiz4KRD`{I@#0l_5j^?_h#&|-@X)(Q&%W8FQpJS#o8SBTy_uceZ}~Tc()Cozes_7Q z@i|V&F*)<I-j_Z>*B(TQxW>>ZTIV|uA_#*X0Fgw3MgluX2#|IUr0x=A31o&#Fp~^Y zLi>}^&Sab*jVhR96r(yQO<idUx~{7ZL6b;O3S}}uHeAw1x;bg`Uo6h-JtB;KV2L8> z!7^HqXGw{+KxCYM6{gI|yv)kXn#NLx^syGW!4M8`q}$Vg_~k)GMrQx1NDnG3tj?(I zu&ju&+yY^F5$iG+$q)t#3q)A!aj8j)0>wkMZ)@F_D9DD{2rIF3hXy_$^EL1fGLE=| z=Ss-5OtH}(J<vr`x-axKU}Ja~>+i$#v;*qTM)i(NM)fqRe?+n2{C^vC9G}{!`#KwE zWj1j#9%D|AL|aP_){I)&B)hOjf&wEeq;m1-0gVBa!<zmQ#=~R%Mn%Va&a1o5AqcV` z-E&Wq+Auz9Y=Qd~=+owECtNgU;8OU^*nvv;!?-!*Ry|Q}dw#3Tw*1y?dE@ETYl}xk zQ-{)Xu3jgeP~ajgqIEO`GyGyUU@5#3dj-|-V{AH;<p#$4bhEjO;Q8Ut*b^v*cdhAe zBhlIwEuYmMHbv{ysVk?itGRp_JGpvc`<CbLw0Ng=r=d4FuSHmI=qQRDQE|^#-1F;w zsP&=FN3pSCY~1!e(J(ivp5JWqF{L=Az$RTnDh3}>j+${YZBnrb1?q5p^HxjTYi_GE zc9szcSYSg5O4LDC&>S;KbtoWLnADV6)I#5a47gz8-+@WZfiikgT;p@7Q?dAX3RmtZ qNS{Kr8u4ny=9O?IK0i8xnTEaD6x;1B(e_rk`fhnr!Cd$@KK~n1I@q!R delta 771 zcmY*WO=uHQ5PtLC?&f9xk~T4I)7n%mwGj$}#Uj+3w0N)wMM#5!!AT`;4dr!_DsRbQ z18Ied@NOPFdlfI<Jb3WvQ3&G2n@2C=L2zE$gDyMs&CZ+o=G%F%D_=_0D^cWEY75QZ zImW)Te;)5`^&|A;X{JO-6-<!rH-NE(A!GndGYy=jGR-HTWd_<Qv(%?kt|bbc&m6F| zj;&4jwy-rL%xAVQNW%dP_!dVOy}mqR1GWX2L)n*Uq}`r+gL(A(EO8D2g9(<w4YD-G zP?N2)#MP0Gb)Z9{h>pcQo)*#~4UBam<G{L-;({HH#l*w0Rfgk)CBib{8Dhw7OU<>Q z{>rfxncL1=KAgZw>`h_y*rmU8UxHdD-98QWaXJ%6A_;V1AV}>D36%c}%y>FRMB$;( zV|W&4v39~kxhP|!A@L~|EaDuV>$7wm*&S9tzwxZP-tM+l=b`x~{y@!qb)LhldE~BK zu=}@nu^*E=9Bn`2nort3*ib%Y%_sK~%$uL?6Ie7I@7lZfo&ZymMOZPH<qNoOKFGzO zs9dTYipQ-3^Gn``lDV5-><xqVLDKGG<8~`)51ri(shFfXH9@ZFw3KR${ASak#>Non z-Bi=|(A~M&?IcZaXRXt1?W!5e&i9_GdE0Jv)g3iuV@q{HI%lJR+|XNZC%0OA56bkh zf0Y~q2|k1(Camz-3xxv}8$-yYkQ7NMLK!@WVUBQ=;cAIG>z;}Tl--ajkXu_DLETpi S=9Rw;7tLqC3QOjPzx)@+JD<w{ diff --git a/quickmap.py b/quickmap.py index 13f8d60..b8863c2 100644 --- a/quickmap.py +++ b/quickmap.py @@ -17,10 +17,11 @@ def dotMultiply(vctA, vctB): ans += a * b return ans -def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=False, passO=False, maxXPower=1): +def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, extendYRate=1, line=False, passO=False, maxXPower=1, inverseK=False): print('Generic-GetMap by Recolic.') arrX, arrY = parrX, parrY - maxX = max(arrX) * extendXRate + maxX, maxY = max(arrX) * extendXRate, max(arrY) * extendYRate + minX, minY = min(arrX) * extendXRate, min(arrY) * extendYRate # Do calculate # y = [k0 k1 k2 ...] dot [x^0 x^1 x^2 ...] print('Your input: ', arrX, '|', arrY) @@ -33,14 +34,18 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals vctX[0] = 0 return dotMultiply(k, vctX) - def lossFunc(k, x, y): return lineFunc(k, x) - y + def lossFunc(k, x, y): return abs(lineFunc(k, x) - y) # Fire! if line: kInit = [1 for _ in range(maxXPower + 1)] kInit[0] = 0 # guarantee passO. - kFinal, _ = leastsq(lossFunc, kInit, args=(X, Y)) - print('Fit line done. k=', kFinal) + if inverseK: + kFinal, _ = leastsq(lossFunc, kInit, args=(Y, X)) + print('Fit line done. k^-1=', kFinal) + else: + kFinal, _ = leastsq(lossFunc, kInit, args=(X, Y)) + print('Fit line done. k=', kFinal) else: print('Drawing map without fitting a line...') @@ -51,8 +56,12 @@ def GetMap(parrX, parrY, windowSizeX=12, windowSizeY=8, extendXRate=1, line=Fals plt.figure(figsize=(windowSizeX, windowSizeY)) plt.scatter(X, Y, color="red", label="Sample Point", linewidth=3) if line: - px = numpy.linspace(0, maxX, 1000) - py = dotMultiply(kFinal, [px ** power for power in range(maxXPower + 1)]) + if inverseK: + py = numpy.linspace(minY, maxY, 1000) + px = dotMultiply(kFinal, [py ** power for power in range(maxXPower + 1)]) + else: + px = numpy.linspace(minX, maxX, 1000) + py = dotMultiply(kFinal, [px ** power for power in range(maxXPower + 1)]) plt.plot(px, py, color="orange", label="Fitting Line", linewidth=2) plt.legend() plt.grid() diff --git a/test.py b/test.py index 86b6559..e65e2ac 100644 --- a/test.py +++ b/test.py @@ -3,6 +3,5 @@ import quickmap yrc=[-6.77, -6.78, -6.78, -6.76, -6.73, -6.73, -6.72, -6.70, -6.69, -6.67, -6.60, -6.45, -6.37, -6.20, -5.99, -5.77, -5.45, -5.07, -3.52, -2.87, -2.36, -2.08, -1.77, -1.55, -1.40, -1.26, -0.97, -0.84, -0.64] xrc=[0.0, 2.0, 4.0, 10.0, 20.0, 22.0, 25.0, 30.0, 33.0, 35.0, 37.0, 38.0, 38.5, 39.0, 39.6, 40.0, 40.5, 41.0, 43.0, 44.0, 45.0, 46.0, 47.0, 48.0, 49.0, 50.0, 53.0, 55.0, 60.0] -for i in range(15): - quickmap.GetMap(xrc, yrc, line=True, maxXPower=i, extendXRate=1) +quickmap.GetMap(xrc, yrc, line=True, maxXPower=16, inverseK=True) -- GitLab