-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathBinaryTree.py
More file actions
70 lines (68 loc) · 2.69 KB
/
BinaryTree.py
File metadata and controls
70 lines (68 loc) · 2.69 KB
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
70
import copy
import numpy as np
class BinaryTree:
@staticmethod
def saver(idx):
def idxConvert(idx):
for i in range(1, len(idx)):
r = idx[i].shape[1] // idx[i-1].shape[1]
for k in range(idx[i].shape[0]):
for ii in range(idx[i].shape[1]):
for jj in range(idx[i].shape[2]):
if idx[i-1][k,ii//r,jj//r,0] < 0.5:
idx[i][k, ii, jj, 0] = -2
return idx
stream = []
idx = idxConvert(idx)
for i in range(0, len(idx)):
for k in range(idx[i].shape[0]):
for ii in range(idx[i].shape[1]):
for jj in range(idx[i].shape[2]):
if idx[i][k,ii,jj,0] > -1:
stream.append(idx[i][k,ii,jj,0])
return stream
@staticmethod
def loader(stream, S):
idx, ct = [], 0
for i in range(len(S)):
idx.append(np.zeros(S[i]).astype('int16'))
for k in range(idx[0].shape[0]):
for ii in range(idx[0].shape[1]):
for jj in range(idx[0].shape[2]):
idx[0][k,ii,jj,0] = stream[ct]
ct += 1
for i in range(1, len(idx)):
r = idx[i].shape[1] // idx[i-1].shape[1]
for k in range(idx[i].shape[0]):
for ii in range(idx[i].shape[1]):
for jj in range(idx[i].shape[2]):
if idx[i-1][k,ii//r,jj//r,0] == 0:
idx[i][k,ii,jj,0] = 0
else:
idx[i][k,ii,jj,0] = stream[ct]
ct += 1
return idx
@staticmethod
def checker(idx, ref_idx):
for i in range(len(idx)):
s = np.sum(np.abs(idx[i]-ref_idx[i]))
assert(s == 0), "Error!"
@staticmethod
def UnitTest():
def gen_data(S):
idx = [np.random.randint(2, size=S[0])]
for i in range(1,len(S)):
r = S[i][1] // S[i-1][1]
idx.append(np.random.randint(2, size=S[i]))
for k in range(idx[i].shape[0]):
for ii in range(idx[i].shape[1]):
for jj in range(idx[i].shape[2]):
if idx[i-1][k,ii//r,jj//r, 0] == 0:
idx[i][k,ii,jj,0] = 0
return idx
S = [(5,4,4,1), (5,8,8,1),(5,16,16,1),(5,64,64,1)]
idx = gen_data(S)
stream = BinaryTree.saver(copy.deepcopy(idx))
idxd = BinaryTree.loader(stream, S)
BinaryTree.checker(idxd, idx)
print("UnitTest Pass")