diff --git a/script/scitest/numpy_test.py b/script/scitest/numpy_test.py index 95afb86..a661f94 100644 --- a/script/scitest/numpy_test.py +++ b/script/scitest/numpy_test.py @@ -344,13 +344,15 @@ print p.order #2 print p[1] #2 #Polynomials can be added, subtracted, multiplied, and divided (returns quotient and remainder): -print p * p #poly1d([ 1, 4, 10, 12, 9]) -print (p**3 + 4) / p #(poly1d([ 1., 4., 10., 12., 9.]), poly1d([4.])) +###TODO: Not supported +#print p * p #poly1d([ 1, 4, 10, 12, 9]) +#print (p**3 + 4) / p #(poly1d([ 1., 4., 10., 12., 9.]), poly1d([4.])) #asarray(p) gives the coefficient array, so polynomials can be used in all functions that accept arrays: +#print np.square(p) # square of individual coefficients array([1, 4, 9]) + +#print p**2 # square of polynomial +print np.poly1d([ 1, 4, 10, 12, 9]) -print p**2 # square of polynomial -print poly1d([ 1, 4, 10, 12, 9]) -print np.square(p) # square of individual coefficients array([1, 4, 9]) #The variable used in the string representation of p can be modified, using the variable parameter: p = np.poly1d([1,2,3], variable='z') @@ -359,5 +361,49 @@ print(p) # 2 #Construct a polynomial from its roots: print np.poly1d([1, 2], True) #poly1d([ 1., -3., 2.]) -3This is the same polynomial as obtained by: -print np.poly1d([1, -1]) * np.poly1d([1, -2]) +###TODO: Not supported +#This is the same polynomial as obtained by: +#print np.poly1d([1, -1]) * np.poly1d([1, -2]) + + + +coeff = [3.2, 2, 1] +print np.roots(coeff) #array([-0.3125+0.46351241j, -0.3125-0.46351241j]) + +################################################################################ +# Fit +################################################################################ + + +x = np.array([0.0, 1.0, 2.0, 3.0, 4.0, 5.0]) +y = np.array([0.0, 0.8, 0.9, 0.1, -0.8, -1.0]) +z = np.fit.polyfit(x, y, 3) +print z #array([ 0.08703704, -0.81349206, 1.69312169, -0.03968254]) # may vary + +p = np.poly1d(z) +p(0.5) #0.6143849206349179 + + +################################################################################ +# Convolution +################################################################################ +#Note how the convolution operator flips the second array before “sliding” the two across one another: +print np.convolve([1, 2, 3], [0, 1, 0.5]) #array([0. , 1. , 2.5, 4. , 1.5]) + +#Only return the middle values of the convolution. Contains boundary effects, where zeros are taken into account: +print np.convolve([1,2,3],[0,1,0.5], 'same') #array([1. , 2.5, 4. ]) + +#The two arrays are of the same length, so there is only one position where they completely overlap: +print np.convolve([1,2,3],[0,1,0.5], 'valid') #array([2.5]) + + + +print np.correlate([1, 2, 3], [0, 1, 0.5]) #array([3.5]) +print np.correlate([1, 2, 3], [0, 1, 0.5], "same") #array([2. , 3.5, 3. ]) +print np.correlate([1, 2, 3], [0, 1, 0.5], "full") #array([0.5, 2. , 3.5, 3. , 0. ]) + +###TODO: Not supported +#Using complex sequences: +#print np.correlate([1+1j, 2, 3-1j], [0, 1, 0.5j], 'full') #array([ 0.5-0.5j, 1.0+0.j , 1.5-1.5j, 3.0-1.j , 0.0+0.j ]) +#Note that you get the time reversed, complex conjugated result when the two input sequences change places, i.e., c_{va}[k] = c^{*}_{av}[-k]: +#print np.correlate([0, 1, 0.5j], [1+1j, 2, 3-1j], 'full') #array([ 0.0+0.j , 3.0+1.j , 1.5+1.5j, 1.0+0.j , 0.5+0.5j])