## `quadtree_boundary(CH, A)`

Returns indeces of cells that fall on the boundary (defined as cells that have no neighbor in at least one direction)

Parameters:

Name Type Description Default
`CH` `numpy int array`

Matrix of child indeces (-1 if leaf node)

required
`A` `scipy sparse.csr_matrix`

Sparse node adjacency matrix, where a value of a in the (i,j) entry means that node j is to the a-th direction of i (a=1: left; a=2: right; a=3: bottom; a=4: top).

required

Returns:

Name Type Description
`children_boundary` `list`

Indeces into CH and A of cells that are both boundary cells and leaf nodes in the tree

`other_boundary` `list`

All boundary cells regardless of leaf status

#### Notes

This only works in 2D quadtrees.

Examples:

``````# Create a random point cloud
P = 2*np.random.rand(100,2) - 1
Source code in `src/gpytoolbox/quadtree_boundary.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 70 71 72 73``` ``````def quadtree_boundary(CH,A): """"Boundary of a quadtree Returns indeces of cells that fall on the boundary (defined as cells that have no neighbor in at least one direction) Parameters ---------- CH : numpy int array Matrix of child indeces (-1 if leaf node) A : scipy sparse.csr_matrix Sparse node adjacency matrix, where a value of a in the (i,j) entry means that node j is to the a-th direction of i (a=1: left; a=2: right; a=3: bottom; a=4: top). Returns ------- children_boundary : list Indeces into CH and A of cells that are both boundary cells and leaf nodes in the tree other_boundary : list All boundary cells regardless of leaf status See Also -------- initialize_quadtree, quadtree_children. Notes ----- This only works in 2D quadtrees. Examples -------- ```python # Create a random point cloud P = 2*np.random.rand(100,2) - 1 # Initialize the quadtree C,W,CH,PAR,D,A = gpytoolbox.initialize_quadtree(P,graded=True,max_depth=8) # Get the boundary bd_children, bd_all = gpytoolbox.quadtree_boundary(CH,A) ``` """ # Returns indeces of cells that fall on the boundary (defined as cells that # have no neighbor in at least one direction) # # Inputs: # CH #nodes by 4 matrix of child indeces (-1 if leaf node) # A #nodes by #nodes sparse adjacency matrix, where a value of a in the # (i,j) entry means that node j is to the a-th direction of i # (a=1: left; a=2: right; a=3: bottom; a=4: top). # # Outputs: # children_boundary is a list of indeces to CH and A of cells that are # both boundary cells and leaf nodes in the tree # other_boundary is a list of all boundary cells regardless of parenthood # # # children_boundary = [] other_boundary = [] for i in range(A.shape[0]): # go over possible direction for j in range(1,5): # is there a neighbor in this direction? j_neighbors = (A[i,:]==j).sum(axis=1).squeeze() #print(j_neighbors) if j_neighbors==0: other_boundary.append(i) if CH[i,0]==-1: children_boundary.append(i) break # # Get uniques # children_boundary = list(set(children_boundary)) # other_boundary = list(set(other_boundary)) return children_boundary, other_boundary ``````