def get_item(examples, index): pc, label = examples[index] src, target, wt = get_knn(pc=pc, num_nbrs=5) L, D = create_laplacian(num_points=1024, rows=src, cols=target) _, eigen_vec = sp.linalg.eigh(a=L, b=D, eigvals=(1, 20)) # edges = [(src[i], target[i], {'weight': wt[i]}) for i in range(src.shape[0])] # dist_mat1 = create_distance_mat(num_points=1024, edges=edges) dist_mat = distance_mat.get_distance_m(1024, src, target, wt) dist_mat[dist_mat == np.inf] = 0 # if np.sum(np.isinf(dist_mat)) > 0.0: # print(f'np.sum(np.isinf(dist_mat))={np.sum(np.isinf(dist_mat))}') # print(f'np.sum(np.isnan(dist_mat))={np.sum(np.isnan(dist_mat))}') # print(f'isnan={np.argwhere(np.isnan(dist_mat))}') # print(f'isinf={np.argwhere(np.isinf(dist_mat))}') # print(f'dist_mat=\n{dist_mat}') # print(f'index={index}\n\n') # print(f'label={label}\n\n') # col = np.argwhere(np.isinf(dist_mat))[0, 1] plot_pc(pc, eigen_vec[:, 3]) # plot_pc(pc, dist_mat[:, col]) # plot_pc(pc) spectral_dist = get_spectral_dist(num_eigen=32, L=L, D=D, dist_mat=dist_mat) return spectral_dist, label
def __getitem__(self, index): """ :return: eigenfunctions & eigenvalues associated with the point cloud. """ pc, label = self.get_pc(index) pc = pc[0:self.num_points, :] src, target, wt = self.get_knn(pc) src, target, wt = self.connect_graph(pc, src, target, wt) dist_mat = distance_mat.get_distance_m(self.num_points, src, target, wt) spectral_dist, eigen_val = self.get_gil_dist(dist_mat) print(f'Got index {index}') return spectral_dist, eigen_val, label
def __getitem__(self, index): """ :return: eigenfunctions & eigenvalues associated with the point cloud. """ pc = self.examples[index] src, target, wt = self.get_knn(pc) src, target, wt = self.connect_graph(pc, src, target, wt) dist_mat = distance_mat.get_distance_m(self.num_points, src, target, wt) eigen_val, eigen_vec = eigh(a=dist_mat, eigvals=(0, self.num_eigen - 1)) print(f'Got index {index}') return eigen_val, eigen_vec
pc_files = get_files_list( f'../data/modelnet40_ply_hdf5_2048/{name}_files.txt') num_nbrs = 5 num_eigen = 32 num_points = 2048 ds = CreateSpectralDist(h5_files=pc_files, num_nbrs=num_nbrs, num_eigen=num_eigen, num_points=num_points) for index in range(5): pc, label = ds.get_pc(index) pc = pc[0:num_points, :] src, target, wt = ds.get_knn(pc) src, target, wt = ds.connect_graph(pc, src, target, wt) L, D = ds.create_laplacian(src, target, wt) dist_mat = distance_mat.get_distance_m(num_points, src, target, wt) eigen_val_lbo, eigen_vec_lbo = eigh(a=L, b=D, eigvals=(1, num_eigen)) eigen_val_dist, eigen_vec_dist = eigh(a=dist_mat, eigvals=(0, num_eigen + 1)) mat = eigen_vec_lbo.transpose() @ eigen_vec_dist plt.figure() plt.imshow(abs(mat), extent=[0, 1, 0, 1]) # plt.imshow(mat) # plt.imshow(np.abs(mat1)-np.abs(mat2), extent=[0, 1, 0, 1]) plt.colorbar() plt.title(f'label={label.item(0)}, num_nbrs={num_nbrs}') num_nbrs = 10 num_eigen = 32 num_points = 2048 ds = CreateSpectralDist(h5_files=pc_files,
import numpy as np import distance_mat num_vert = 9 src = np.array([0, 0, 1, 1, 2, 2, 2, 3, 3, 4, 5, 6, 6, 7]) trg = np.array([1, 7, 2, 7, 3, 8, 5, 4, 5, 5, 6, 7, 8, 8]) wt = np.array([4, 8, 8, 11, 7, 2, 4, 9, 14, 10, 2, 1, 6, 7]) res = distance_mat.get_distance_m(num_vert, src, trg, wt) print(res) #mopile the cpp file first #c++ -O3 -Wall -shared -std=c++11 -fPIC `python3 -m pybind11 --includes` example.cpp -o example`python3-config --extension-suffix`