コード例 #1
0
def reGenerateSemiMatrix(list_all_station):
	G = np.zeros([MATRIX_SIZE, MATRIX_SIZE])
	a0, c0 = global_data[0][0], global_data[0][1]
	meteo_size = len(list_all_station)
	for x in xrange(0,meteo_size):#x 0->97 is Meteo_id 1->98
		for y in xrange(0,meteo_size):#0->97 is Meteo_id 1->98
			#semi = semivariance( a, b)
			#cov = covariance(a,b)
			h = D[x][y]#distance
			G_COV[x][y] = semiToCov( h, a0, c0)
コード例 #2
0
def krigeOne(point, neighbor, list_all_station, list_data, G, D):
	#print 'KRIGE ONE'
	list_station = list_all_station
	#Cal distances from current point to all others
	item0 = (0, point[0], point[1])
	meteo_size = len(list_station)
	list_d = []
	#cal all distance from point to others stations 
	for i in xrange(0,meteo_size):
		#Cal distance one-one
		item1 = list_station[i]
		d = haversine(item0[2], item0[1] ,item1[2], item1[1])
		newitem = (item1[0], d, item1[3], item1[1], item1[2])#id, distance, temp, lat, lon
		list_d.append(newitem)
	#Sort by distance, get n first nearest neighbors
	sorted_list = sorted(list_d, key=itemgetter(1))
	list_neighbor = sorted_list[:neighbor]
	#print list_neighbor
	'''
	#Get areaid for each station
	list_neighbor_with_areaid = []
	for item in list_neighbor:
		item1 = list_station[item[0]]
		new_item = (item[0], item[1], getAreaIdFromPoint([item1[1], item1[2]]))
		list_neighbor_with_areaid.append(new_item)
	'''
	K1 = np.zeros([neighbor, neighbor])
	K = np.zeros([neighbor, neighbor])
	k = np.zeros([neighbor, 1])
	T = []# list of temp of neighbor station at interpolate time
	string = ''
	i = 0 
	for  item in list_neighbor:
		f.write('getting T\n')
		#Nhiet do 1 thang cua tram item
		#print len(list_data)
		t = list_data[item[0]-1]
		trendValue = getTrendValue(trend_curve, item[3], item[4])
		#print trend_curve, trendValue
		f.write(str(t) + '\n')
		t_size = len(t)
		T.append(t[t_size - 1] - trendValue)
		j = 0
		string = string + str(item[0])
		#print item
		#Area key = 0, because of we have only one model for all
		a0, c0 = global_data[0][0], global_data[0][1]
		h = item[1]#distance
		k[i][0] = semiToCov( h, a0, c0)
		for sub_item in list_neighbor:
			string = string+' ' + str(sub_item[0])
			#print i, j
			K1[i][j] = G_COV[item[0]-1][sub_item[0]-1]
			K [j][i] = K1[i][j]#Inverse of K1
			j = j + 1
		string = string + '\n'
		i = i + 1
	f.write('T: ' + str(T) + '\n')
	f.write('neighbors list: \n' + string + '\n')
	#print string
	#print k
	#print K
	f.write('K: \n' + str(K) +' \n')
	f.write('k: \n' + str(k) +' \n')
	weight = np.dot(K,k)
	f.write('ori-weight: \n' + str(weight) +' \n')
	if sum(weight) == 0:
		f.write('NOT RELATED\n')
		weight[:] = 1 #assign the same weight for all elements
	weight = weight/sum(weight)
	krige = np.dot(T, weight)
	f.write('nor-weight: \n' + str(weight) +' \n')
	f.write('T: \n' + str(T)+' \n')
	f.write('krige: ' + str(krige)+' \n')
	#print krige
	#print krige[0],' ',
	#print k
	weight = inverseMatrix(weight)
	derivation = np.dot(weight, k)
	f.write('derivation: ' + str(derivation[0][0])+' \n')	
	#time.sleep(2)
	return krige[0], derivation[0][0]


	'''