#Latin hypercube sampling code #Function: To produce a random Latin hypercube sample that #can then be used for sensitivity and #uncertainty analysis. # import random import math import string def rdcsv(name): f = open(name,"r") data = [] tmp = f.readline() while tmp !="": onerow = tmp.split(",") last = len(onerow)-1 k = len(onerow[last]) if k!= 1: onerow[last] = onerow[last][0:k-1] if len(onerow) != 0: data.append(onerow) tmp = f.readline() f.close() return(data) def outcsv(name,data): f = open(name,"w") for i in range(0,len(data)): tmp = "" for j in range(0,len(data[i])): tmp = tmp + str(data[i][j]) + "," tmp = tmp[0:len(tmp)-1]+"\n" f.writelines(tmp) f.close() def trunc(x,n): a = x * 10 **n a = math.floor(a) return(float(a)/10**n) #Get information on parameters and ranges from user file filename = raw_input("Enter parameter range file name: ") params = rdcsv(filename) #format is: #param-name,low,high #set dimension k=len(params) #set num of intervals #which is also the number of samples to draw n=int(raw_input("Enter number of samples to draw: ")) names=[] for i in range(0,k): names.append(params[i][0]) pranges=[] for i in range(0,k): tmp=[names[i]] low=float(params[i][1]) high=float(params[i][2]) delta=(high-low)/float(n) for j in range(0,n): tmp.append(random.uniform(low+j*delta,low+(j+1)*delta)) pranges.append(tmp) if (n