81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			81 lines
		
	
	
		
			1.9 KiB
		
	
	
	
		
			Python
		
	
	
		
			Executable File
		
	
	
	
	
#!/bin/env python
 | 
						|
__author__ = 'dongyun.zdy'
 | 
						|
 | 
						|
 | 
						|
import numpy as np
 | 
						|
from scipy.optimize import leastsq
 | 
						|
from scipy.optimize import curve_fit
 | 
						|
 | 
						|
 | 
						|
 | 
						|
import sys
 | 
						|
import math
 | 
						|
 | 
						|
def totalcost_to_nsec_single(totalcost_est,K):
 | 
						|
    return K * totalcost_est
 | 
						|
 | 
						|
 | 
						|
def totalcost_to_nsec_array(totalcost_est_arr,K):
 | 
						|
    res = []
 | 
						|
    for single_est in totalcost_est_arr:
 | 
						|
        C = totalcost_to_nsec_single(single_est,K)
 | 
						|
        res.append(C)
 | 
						|
    return np.array(res)
 | 
						|
 | 
						|
def case_cmp(a,b):
 | 
						|
    if a[2] < b[2] :
 | 
						|
        return -1
 | 
						|
    elif a[2] > b[2] :
 | 
						|
        return 1
 | 
						|
    else :
 | 
						|
        return 0
 | 
						|
 | 
						|
def extract_info_from_line(line):
 | 
						|
    splited = line.split(",")
 | 
						|
    cost = int(splited[0])
 | 
						|
    cost_est = int(float(splited[1]))
 | 
						|
    row = int(splited[2])
 | 
						|
    row_est = int(float(splited[3]))
 | 
						|
    return (cost, cost_est, row, row_est)
 | 
						|
 | 
						|
if __name__ == '__main__':
 | 
						|
    file_name = ""
 | 
						|
    if len(sys.argv) < 2 or len(sys.argv) > 3:
 | 
						|
        print "wrong arg"
 | 
						|
    else:
 | 
						|
        file_name = sys.argv[1]
 | 
						|
        if len(sys.argv) == 3 and cmp(sys.argv[2], "-w") == 0:
 | 
						|
            start = False
 | 
						|
            while not start:
 | 
						|
                start_str = raw_input()
 | 
						|
                if cmp(start_str, "#") == 0:
 | 
						|
                    start = True
 | 
						|
        costs = []
 | 
						|
        cost_ests = []
 | 
						|
        rows = []
 | 
						|
        row_ests = []
 | 
						|
        file = open(file_name, "r")
 | 
						|
        cases = []
 | 
						|
        for line in file:
 | 
						|
            case_param = extract_info_from_line(line)
 | 
						|
            cases.append(case_param)
 | 
						|
        cases.sort(case_cmp)
 | 
						|
        for case in cases:
 | 
						|
            costs.append(case[0])
 | 
						|
            cost_ests.append(case[1])
 | 
						|
            rows.append(case[2])
 | 
						|
            row_ests.append(case[3])
 | 
						|
 | 
						|
        costs_np = np.array(costs)
 | 
						|
        cost_ests_np = np.array(cost_ests)
 | 
						|
        rows_np = np.array(rows)
 | 
						|
        row_ests_np = np.array(row_ests)
 | 
						|
 | 
						|
        params_init = [1]
 | 
						|
        params_fit, conf = curve_fit(totalcost_to_nsec_array,cost_ests_np,costs_np,params_init)
 | 
						|
 | 
						|
        p = [param for param in params_fit]
 | 
						|
        print p
 | 
						|
 | 
						|
 |