Spaces:
Runtime error
Runtime error
| import numpy as np | |
| import scipy.sparse as sp | |
| import torch | |
| def scipy_to_torch_sparse(scp_matrix): | |
| values = scp_matrix.data | |
| indices = np.vstack((scp_matrix.row, scp_matrix.col)) | |
| i = torch.LongTensor(indices) | |
| v = torch.FloatTensor(values) | |
| shape = scp_matrix.shape | |
| sparse_tensor = torch.sparse.FloatTensor(i, v, torch.Size(shape)) | |
| return sparse_tensor | |
| ## Adjacency Matrix | |
| def mOrgan(N): | |
| sub = np.zeros([N, N]) | |
| for i in range(0, N): | |
| sub[i, i-1] = 1 | |
| sub[i, (i+1)%N] = 1 | |
| return sub | |
| ## Downsampling Matrix | |
| def mOrganD(N): | |
| N2 = int(np.ceil(N/2)) | |
| sub = np.zeros([N2, N]) | |
| for i in range(0, N2): | |
| if (2*i+1) == N: | |
| sub[i, 2*i] = 1 | |
| else: | |
| sub[i, 2*i] = 1/2 | |
| sub[i, 2*i+1] = 1/2 | |
| return sub | |
| def mOrganU(N): | |
| N2 = int(np.ceil(N/2)) | |
| sub = np.zeros([N, N2]) | |
| for i in range(0, N): | |
| if i % 2 == 0: | |
| sub[i, i//2] = 1 | |
| else: | |
| sub[i, i//2] = 1/2 | |
| sub[i, (i//2 + 1) % N2] = 1/2 | |
| return sub | |
| def genMatrixesLungsHeart(): | |
| RLUNG = 44 | |
| LLUNG = 50 | |
| HEART = 26 | |
| Asub1 = mOrgan(RLUNG) | |
| Asub2 = mOrgan(LLUNG) | |
| Asub3 = mOrgan(HEART) | |
| ADsub1 = mOrgan(int(np.ceil(RLUNG / 2))) | |
| ADsub2 = mOrgan(int(np.ceil(LLUNG / 2))) | |
| ADsub3 = mOrgan(int(np.ceil(HEART / 2))) | |
| Dsub1 = mOrganD(RLUNG) | |
| Dsub2 = mOrganD(LLUNG) | |
| Dsub3 = mOrganD(HEART) | |
| Usub1 = mOrganU(RLUNG) | |
| Usub2 = mOrganU(LLUNG) | |
| Usub3 = mOrganU(HEART) | |
| p1 = RLUNG | |
| p2 = p1 + LLUNG | |
| p3 = p2 + HEART | |
| p1_ = int(np.ceil(RLUNG / 2)) | |
| p2_ = p1_ + int(np.ceil(LLUNG / 2)) | |
| p3_ = p2_ + int(np.ceil(HEART / 2)) | |
| A = np.zeros([p3, p3]) | |
| A[:p1, :p1] = Asub1 | |
| A[p1:p2, p1:p2] = Asub2 | |
| A[p2:p3, p2:p3] = Asub3 | |
| AD = np.zeros([p3_, p3_]) | |
| AD[:p1_, :p1_] = ADsub1 | |
| AD[p1_:p2_, p1_:p2_] = ADsub2 | |
| AD[p2_:p3_, p2_:p3_] = ADsub3 | |
| D = np.zeros([p3_, p3]) | |
| D[:p1_, :p1] = Dsub1 | |
| D[p1_:p2_, p1:p2] = Dsub2 | |
| D[p2_:p3_, p2:p3] = Dsub3 | |
| U = np.zeros([p3, p3_]) | |
| U[:p1, :p1_] = Usub1 | |
| U[p1:p2, p1_:p2_] = Usub2 | |
| U[p2:p3, p2_:p3_] = Usub3 | |
| return A, AD, D, U |