コード例 #1
0
def test_barcode():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('C', 1, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	curve = hm.get_curve(vertices, k = k, w = w)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	c_s = curve[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	
	f, ax = plt.subplots(1,2)
	plt_edges, plt_barcode = ax
	plt_edges.scatter(v_s[:,0], v_s[:,1], marker = '.', c=c_s, s=200)
	for edge in edges:
		plt_edges.plot(v_s[edge, 0], v_s[edge, 1], lw = 1, c = 'blue')
	plt_edges.invert_yaxis()

	ordered_simplices, curve_lookup = hm.get_ordered_simplices(v_s, c_s, edges)
	barcode = bc.get_barcode(ordered_simplices, degree_values=c_s[np.argsort(c_s)])
	b0 = barcode[barcode[:,2] == 0, :]
	bc.plot_barcode_gant(b0, plt=plt_barcode)
	plt.show()
コード例 #2
0
def test_edges():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('A', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	plot_edges(v_s, edges, plt)
	plt.gca().invert_yaxis()
	plt.show()
コード例 #3
0
def test_alpha_4d(): 
	N = 200
	N_s = 100
	k = int(N/5)
	w = .2
	r = .15
	vertices = get_image('B', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	edges, v_s, _ = hm.alpha_complex_4d(vertices, tangents, r = r, w=w, N_s = N_s)
	plt.scatter(vertices[:,0], vertices[:,1], marker='.', c='gray')
	plt.scatter(v_s[:,0], v_s[:,1], marker='+', c='red')
	for edge in edges:
		plt.plot(v_s[edge,0], v_s[edge,1], lw = 1, c = 'blue')

	plt.gca().invert_yaxis()
	plt.show()
コード例 #4
0
def test_witness_complex_4d():
	N = 200
	N_s = 20
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('V', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	edges, landmarks, sparse = hm.witness_complex_4d(vertices, tangents, w, N_s)

	plt.scatter(vertices[:,0], vertices[:,1], marker='.', c='gray')
	plt.scatter(landmarks[:,0], landmarks[:,1], marker='+', c='red')
	for edge in edges:
		plt.plot(landmarks[edge,0], landmarks[edge,1], lw = 1, c = 'blue')

	plt.gca().invert_yaxis()
	plt.show()
コード例 #5
0
def test_edges_for_point():
	N = 200
	k = int(N/5)
	w = .2
	r = 0.2
	vertices = get_image('P', 0, size=100, sample_size=N)[0]
	# edges = hm.get_rips_complex(vertices, k, w, r)

	tangents = hm.find_tangents(vertices, k)
	tspace = hm.get_tspace(vertices, tangents, w)
	kd_tree = spatial.KDTree(tspace)

	edges = hm.rips_complex_for_point(0, tspace, kd_tree, r = r).T
	print(edges)
	plt.scatter(vertices[:,0], vertices[:,1], marker = '.', c='gray', s=4)
	for edge in edges:
		plt.plot(vertices[edge, 0], vertices[edge, 1], lw = 1, c = 'blue')
		# if annotate:
		# 	plt.annotate("{0}".format(edge[0]), (vertices[edge[0],0], vertices[edge[0],1]))
		# 	plt.annotate("{0}".format(edge[1]), (vertices[edge[1],0], vertices[edge[1],1]))			

	plt.show()
コード例 #6
0
def test_filtration():
	N = 200
	N_s = 50
	k = int(N/5)
	w = .5
	r = .6
	vertices = get_image('A', 2, size=200, sample_size=N)[0]
	tangents = hm.find_tangents(vertices, k)
	curve = hm.get_curve(vertices, k = k, w = w)
	sparse = sparse_sample(vertices, N_s)
	v_s = vertices[sparse,:]
	t_s = tangents[sparse]
	c_s = curve[sparse]
	edges = hm.get_rips_complex(v_s, tangents=t_s, k = k, w = w, r = r)
	simplices, curve_lookup = hm.get_ordered_simplices(v_s, c_s, edges)
	max_degree = np.max(simplices[:,3])
	degree_step = math.ceil(max_degree/16.0)
	verts_degree = simplices[simplices[:,4] == 0,0:3]

	f, ax = plt.subplots(4,4, sharex=True, sharey=True)
	ax[0][0].invert_yaxis()
	for i in range(4):
		for j in range(4):
			idx = i*4 + j
			deg = min(idx * degree_step, max_degree)
			plot_simplices(simplices, deg, v_s, ax[i][j])

			ax[i][j].set_title("κ={0:1.4f}".format(curve[verts_degree[deg,0]]), fontsize=8)
			ax[i][j].set_xticklabels([])
			ax[i][j].set_yticklabels([])
	
	plt.tight_layout()
	plt.figure()
	barcode = bc.get_barcode(simplices, degree_values=c_s[np.argsort(c_s)])
	b0 = barcode[barcode[:,2] == 0, :]	
	bc.plot_barcode_gant(b0, plt=plt)
	plt.show()