def infer_clusters(contactMat, clusters, offsets, alpha, classical=False):
"""Infers 3D coordinates for multiple clusters with same contact matrix"""
assert sum([len(cluster.getPointNums()) for cluster in clusters]) == len(contactMat)
at.makeSymmetric(contactMat)
rowsums = np.array([sum(row) for row in contactMat])
assert len(np.where(rowsums == 0)[0]) == 0
distMat = at.contactToDist(contactMat, alpha)
at.makeSymmetric(distMat)
if classical: #classical MDS
coords = st.cmds(distMat)
else:
mds = manifold.MDS(n_components=3, metric=True, random_state=np.random.RandomState(), verbose=0, dissimilarity="precomputed", n_jobs=-1)
coords = mds.fit_transform(distMat)
for offset, cluster in zip(offsets, clusters):
for i in range(len(cluster.getPoints())):
cluster.getPoints()[i].pos = coords[i + offset]
评论列表
文章目录