I'm running Python 2.7.11 from the Anaconda distribution (version 2.4.1) on a MacBook Pro running Mac OS X version 10.11.2 (El Capitan)

I'm attempting to use numpy.ma.polyfit to perform a linear least square fit on some data I have. I'm running NumPy version 1.10.1. I've observed that in executing either numpy.polyfit or numpy.ma.polyfit I get the following traceback:

/Users/user/anaconda/lib/python2.7/site-packages/numpy/lib/polynomial.py:594: RankWarning: Polyfit may be poorly conditioned
  warnings.warn(msg, RankWarning)
Traceback (most recent call last):
  File "ComputeEnergy.py", line 132, in <module>
coeffs, covar = np.ma.polyfit( xfit, yfit, fit_degree, rcond=rcondv, cov=True ) File "/Users/user/anaconda/lib/python2.7/site-packages/numpy/ma/extras.py", line 1951, in polyfit
    return np.polyfit(x, y, deg, rcond, full, w, cov)
File "/Users/user/anaconda/lib/python2.7/site-packages/numpy/lib/polynomial.py", line 607, in polyfit
    return c, Vbase * fac
ValueError: operands could not be broadcast together with shapes (6,6) (0,)


I've attached a stripped down version of the Python program I'm running.

Any suggestions?

Sam Dupree.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
Created on Fri Dec 07 22:25:29 2015

@author: user
"""




from astropy.time import Time
from datetime import datetime
import matplotlib.pyplot as plt
import numpy as np
import os
import string



# set physical constants
# -----------------------
#                                math constants
#                                --------------
rad_per_deg = np.pi / 180.
deg_per_rad = 1. / rad_per_deg

#                                orbital parameters for Earth
#                                ----------------------------
GMearth    = 3.986004418e14       # in m**3/sec**2
Rearth     = 6371.0e3             # in m

count = 0
x = []
y = []

fname = "TLE-ISS-25544.txt"
fhand = open(fname)


print
print "Processing TLEs in ", fname
print "------------------ "
print


for   line in fhand:
    count = count + 1
    if line[0] == '1':
        sat_number  = line[2:7]
        sat_classif = line[7:8]
        intl_desig  = line[9:17]
        yr    = int(line[18:20])
        dayno = float(line[20:32])
        if yr < 50:
            yr = yr + 2000
        else:
            yr = yr + 1900
    elif line[0] == '2':
        mean_motion_kozai =  float(line[52:63])
        mean_motion       =  mean_motion_kozai * 2.e0 * np.pi / 86400.e0
        total_eng         = -0.5e0 * ( mean_motion * GMearth ) ** (2.e0/3.e0)
        print
        print ' sat number               = ', sat_number, ' sat classif = ', sat_classif, ' Internatl Desig = ', intl_desig
        print ' yr, dayno                = ', yr, dayno
        print ' mean motion (Revs/day)   = ', mean_motion_kozai, ' mean motion (rad/sec) = ', mean_motion
        print ' Total Energy (m^2/sec^2) = ', total_eng
        print
        
        x.append(dayno)
        y.append(total_eng)


fhand.close()


count      = len(x)

fit_span   = 9
fit_cycles = count - fit_span + 1
fit_degree = 5

fit_offset = 0

evalpt     = fit_span - 1
midpt      = int( np.ceil(fit_span / 2) )

eps        = 2.e-16

print
print " Fit Control Parameters "
print " ---------------------- "
print " count      = ", count
print " eps        = ", eps
print " evalpt     = ", evalpt
print " midpt      = ", midpt
print " fit_span   = ", fit_span
print " fir_degree = ", fit_degree
print " fit_offset = ", fit_offset
print " fit_cycles = ", fit_cycles
print

xplot       = []
yplot       = []

yplot_resid = []

dyplot      = []
xdyplot     = []


for ifit in range( 0, fit_cycles ):

    xfit   = []
    yfit   = []
    coeffs = []
    resids = []
    rank   = []
    sv     = []
    rrcond = []
    covar  = []
    
    for i in range( 0, fit_span ):
        k = i + fit_offset
        xfit.append( x[k] )
        yfit.append( y[k] )
    
    rcondv  = eps * len(xfit)
#    coeffs = np.polyfit( xfit, yfit, fit_degree, rcond=rcondv )
#    coeffs, resids, rank, sv, rrcond = np.polyfit( xfit, yfit, fit_degree, rcond=rcondv, full=True )
#    coeffs, covar = np.polyfit( xfit, yfit, fit_degree, rcond=rcondv, cov=True )
    coeffs, covar = np.ma.polyfit( xfit, yfit, fit_degree, rcond=rcondv, cov=True )
    
    rows = len(covar)
    
    xpoly = xfit[evalpt]
    ypoly = np.polyval( coeffs, xfit[evalpt] )
    
    ypoly_resid = ypoly - yfit[evalpt]
    
    xplot.append( xpoly )
    yplot.append( ypoly )
    
    yplot_resid.append( ypoly_resid )
    
    p      = np.poly1d( coeffs )
    dp     = np.polyder( p )
    dypoly = dp( xfit[midpt] )
    
    xdyplot.append( xfit[midpt] )
    dyplot.append( dypoly )
    
    print
    print "ifit                             = ", ifit
    print " fit_offset, fit_offset+fit_size = ", fit_offset, fit_offset+fit_span
    print
    print " rcondv                          = ", rcondv
    print
    print " coeffs                          = ", coeffs
    print
    print " resids                          = ", resids
    print
    print " rank                            = ", rank
    print
    print " sv                              = ", sv
    print
    print " rrcond                          = ", rrcond
    print
    print " covar                           = "
    print(covar)
    
    print
    print('\n'.join(['   '.join(['{:4}'.format(item) for item in row]) 
      for row in covar]))
            
    print
    print " xfit[evalpt], yfit[eval]        = ", xfit[evalpt], yfit[evalpt]
    print " xpoly       , ypoly             = ", xpoly, ypoly
    print " xpoly       , ypoly_resid       = ", xpoly, ypoly_resid
    print
    print " xfit[midpt] , dypoly            = ", xfit[midpt], dypoly
    
    fit_offset = fit_offset + 1



# plot the total energy vs. modified Julian date
# ----------------------------------------------
plt.figure( 'Figure 1. Total Energy versus Time' )
plt.plot( x, y )
plt.title('Total Energy versus Time' )
plt.xlabel( 'Day Number -- 2015' )
plt.ylabel( 'Energy [meters^2 / second^2]' )

plt.savefig("Total Energy vs.Time.jpg")
    
plt.show()



# plot the fitted total energy vs. modified Julian date
# -----------------------------------------------------
plt.figure( 'Figure 2. Fitted Total Energy versus Time' )
plt.plot( xplot, yplot )
plt.title('Fitted Total Energy versus Time' )
plt.xlabel( 'Day Number -- 2015' )
plt.ylabel( 'Energy [meters^2 / second^2]' )

plt.savefig("Fitted Total Energy vs.Time.jpg")
    
plt.show()



# plot the fitted total energy vs. modified Julian date
# -----------------------------------------------------
plt.figure( 'Figure 3. Total Energy Residuals versus Time' )
plt.plot( xplot, yplot_resid )
plt.title('Total Energy Residual versus Time' )
plt.xlabel( 'Day Number -- 2015' )
plt.ylabel( 'Energy [meters^2 / second^2]' )

plt.savefig("Total Energy Residual vs.Time.jpg")
    
plt.show()



# plot the fitted total energy vs. modified Julian date
# -----------------------------------------------------
plt.figure( 'Figure 4. Fitted Total Energy Derivative versus Time' )
plt.plot( xdyplot, dyplot )
plt.title('Fitted Total Energy Derivative versus Time' )
plt.xlabel( 'Day Number -- 2015' )
plt.ylabel( 'Energy [meters^2 / second^3]' )

plt.savefig("Fitted Total Energy Derivative vs.Time.jpg")
    
plt.show()


_______________________________________________
NumPy-Discussion mailing list
NumPy-Discussion@scipy.org
https://mail.scipy.org/mailman/listinfo/numpy-discussion

Reply via email to