-
Notifications
You must be signed in to change notification settings - Fork 0
/
EDComputation.py
69 lines (53 loc) · 2.17 KB
/
EDComputation.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import numpy as np
import time
def EDistance_loop(X):
result_loop = np.zeros_like(X)
distance = 0
for i in range(len(X)): # no. of rows
ci = 0
while(ci < len(X)):
for j in range(len(X[0])): # no. of cols
distance += ((X[i][j]-X[ci][j])**2)
result_loop[i][ci] = np.float64(np.sqrt(distance))
ci += 1
distance = 0
return result_loop
def EDistance_cool(X):
result_cool = np.zeros_like(X)
result_cool = np.sqrt((np.square(X[:,np.newaxis]-X).sum(axis=2)))
return result_cool
print 'starting running .....'
np.random.seed(100)
params = range(10,100,10) # different param setting
nparams = len(params) # number of different parameters
perf_loop = np.zeros([10,nparams]) # 10 trials = 10 rows, each parameter is a column
perf_cool = np.zeros([10,nparams])
counter = 0
for ncols in params:
nrows = ncols
print "matrix dimensions: ", nrows, ncols
for i in range(10):
X = np.random.randint(0,20,[nrows,ncols]) # random matrix
# you need to use random.rand(...) for float matrix
st = time.time()
ED_loop = EDistance_loop(X)
et = time.time()
perf_loop[i,counter] = et - st # time difference
st = time.time()
ED_cool = EDistance_cool(X)
et = time.time()
perf_cool[i,counter] = et - st
counter = counter + 1
mean_loop = np.mean(perf_loop, axis = 0) # mean time for each parameter setting (over 10 trials)
mean_cool = np.mean(perf_cool, axis = 0)
std_loop = np.std(perf_loop, axis = 0) # standard deviation
std_cool = np.std(perf_cool, axis = 0)
import matplotlib.pyplot as plt
plt.errorbar(params, mean_loop[0:nparams], yerr=std_loop[0:nparams], color='red',label = 'Loop Solution')
plt.errorbar(params, mean_cool[0:nparams], yerr=std_cool[0:nparams], color='blue', label = 'Matrix Solution')
plt.xlabel('Number of Cols of the Matrix')
plt.ylabel('Running Time (Seconds)')
plt.legend()
plt.savefig('CompareEDistance.pdf')
# plt.show() # uncomment this if you want to see it right way
print "result is written to CompareEDistance.pdf"