Kind of sure this is the translation line for line: #We define some vars before utilizing them x,and y are list comprehension # You said int for x, so it's created in ints, and y is in floats x = [num for num in range(0,496)] # You said double for y, so the it's created in floats, and x is an int list y = [float(num) for num in range(0,496)] i = 0 j = 0 k = 0 max_elements = 495 mini = 0 minj = 0 mink = 0
def minimize(max_elements): minsum = float(9999999999999.0) # used float just to show as double for i in range(2,max_elements-6): for j in range(i+2,max_elements-4): for k in range(j+2,max_elements-2): sum = error(0,i) sum += error(i,j) sum += error(j,k) sum += error(k,495) if sum < minsum: minsum = sum mini = i minj = j mink = k def error(istart,iend): m = 0 lin_estimate = 0 errorsq = float(0) #just to show double = float type again errorsq = 0 lin_estimate = y[istart] + ((y[iend] - y[istart]) * ((x[m] - x[istart]) / (x[iend] - x[istart]))) errorsq += (lin_estimate - y[m]) * (lin_estimate - y[m]) #print errorsq # insert print for quick in line debugging by uncommenting return errorsq #Call function minimize minimize(max_elements) Don't forget the tabs , or spaces, and the forced indentation. On Sun, Feb 2, 2014 at 6:44 PM, David Hutto <dwightdhu...@gmail.com> wrote: > > > > On Sun, Feb 2, 2014 at 3:46 PM, Kipton Moravec <k...@kdream.com> wrote: > >> I am new to Python, and I do not know how to traverse lists like I >> traverse arrays in C. This is my first program other than "Hello World". >> I have a Raspberry Pi and they say Python is the language of choice for >> that little machine. So I am going to try to learn it. >> >> >> I have data in the form of x, y pairs where y = f(x) and is non linear. >> It comes from a .csv file. >> >> In this case x is an integer from 165 to 660 so I have 495 data sets. >> >> I need to find the optimal locations of three values of x to piecewise >> linear estimate the function. >> >> >> So I need to find i, j, k so 165 < i < j < k < 660 and the 4 line >> segments [(165, f(165)), (i, f(i))], [(i, f(i)), (j, f(j))], [(j, f(j), >> (k, f(k))], [(k, f(k)), (660, f(660))]. >> >> So as you iterate through the minimize function below, you want something > like this, I believe: > > if (165 < i) and (i < j) and (j < k) and (k < 660): > print 'true' > else: > print 'false' > > >> The value I need to minimize is the square of the difference between the >> line estimate and the real value at each of the 495 points. >> >> >> I can do this in C. To keep it simple to understand I will assume the >> arrays x[] and y[] and minsum, mini, minj, and mink are global. >> >> >> I have not tested this but this is what I came up with in C. Assuming >> x[] and y[] are already filled with the right values. >> >> >> int x[495]; >> double y[495]; >> max_elements = 495; >> double minsum; >> int mini, minj, mink >> >> #We define some vars before utilizing them x,and y are list comprehension > # You said int for x, so it's created in ints, and y is in floats > x = [num for num in range(0,496)] > # You said double for y, so the it's created in floats, and x is an int > list > y = [float(num) for num in range(0,496)] > i = 0 > j = 0 > k = 0 > max_elements = 495 > mini = 0 > minj = 0 > mink = 0 > > >> void minimize(int max_elements) >> >> > def minimize(max_elements): > > { >> minsum = 9999999999999.0; // big big number >> >> > minsum = float(9999999999999.0) # used float just to show as double > > > >> for (i=2; i<max_elements-6;i++) >> for (j=i+2; j< max_elements -4; j++) >> for (k=j+2; k< max_elements-2;k++) >> > > for i in range(2,max_elements-6): > print i > for j in range(i+2,max_elements-4): > print j > for k in range(j+2,max_elements-2): > print k > > >> { >> sum = error(0,i); >> sum += error(i,j); >> sum += error(j,k); >> sum += error(k,495) >> >> > sum = error(0,i) > sum += error(i,j) > sum += error(j,k) > sum += error(k,495) > > >> if (sum < minsum) >> { >> minsum = sum; >> mini = i; >> minj = j; >> mink = k; >> } >> } >> } >> >> > > if sum < minsum: > > minsum = sum > mini = i > minj = j > mink = k > > >> >> double error(int istart, int iend) >> { >> >> > error(int istart, int iend): > > > >> // linear interpolation I can optimize but left >> // it not optimized for clarity of the function >> >> int m; >> >> double lin_estimate; >> >> double errorsq; >> >> errorsq = 0; >> >> > > int m > > lin_estimate = > > errorsq = float(0) #just to show double = float type again > > errorsq = 0 > > > >> for (m=istart; m<iend; m++) >> { >> lin_estimate = y[istart] + ((y[iend] - y[istart]) * >> ((x[m] - x[istart]) / (x[iend] - x[istart]))); >> >> errorsq += (lin_estimate - y[m]) * (lin_estimate - y[m]); >> } >> >> return (errorsq); >> >> } >> >> >> >> > > for iterator in range(istart; iend): > > lin_estimate = y[istart] + ((y[iend] - y[istart]) * ((x[m] - > x[istart]) / (x[iend] - x[istart]))) > > errorsq += (lin_estimate - y[m]) * (lin_estimate - y[m]) > > return errorsq > > > > >> At the end the three values I want are mini, minj, mink; >> or x[mini], x[minj], x[mink] >> >> >> So how do I do this (or approach this) in Python? >> >> Loose Translation > >> >> Kip >> >> _______________________________________________ >> Tutor maillist - Tutor@python.org >> To unsubscribe or change subscription options: >> https://mail.python.org/mailman/listinfo/tutor >> > > I'll look at it a little more later on, unless someone' is less rusty in C > and Python than I am. > > -- > Best Regards, > David Hutto > *CEO:* *http://www.hitwebdevelopment.com > <http://www.hitwebdevelopment.com>* > > -- Best Regards, David Hutto *CEO:* *http://www.hitwebdevelopment.com <http://www.hitwebdevelopment.com>*
_______________________________________________ Tutor maillist - Tutor@python.org To unsubscribe or change subscription options: https://mail.python.org/mailman/listinfo/tutor