我有一个二进制方形稀疏矩阵 A ,可以看作是Graph的邻接矩阵。
现在考虑可以具有不同维度的第二个二元方形稀疏矩阵 B 。
我想构建一个算法,重新排序矩阵 A ,或矩阵 A 的一组元素,以便最大化与矩阵的重叠乙
以下是一个例子:
我在python中创建了一个随机稀疏矩阵B:
import scipy.spatial as spatial
import matplotlib.pyplot as plt
import numpy
coords_B = numpy.random.uniform(size=(20,3))*20
pdistmat = spatial.distance.squareform(spatial.distance.pdist(coords_B))
B = (pdistmat <= 8)
matshow(B)
colorbar()
现在我通过向B添加噪声并添加一些行和列来构建矩阵A:
coords_A = numpy.r_[numpy.random.uniform(size=(5,3))*20,
coords_B + numpy.random.uniform(size=(20,3))*4,
numpy.random.uniform(size=(6,3))*20]
pdistmat = spatial.distance.squareform(spatial.distance.pdist(coords_A))
A = (pdistmat <= 8)
matshow(A)
colorbar()
现在我随机化了矩阵A:
random_order = numpy.random.choice(A.shape[0], replace=False,
size=A.shape[0])
A_randomized = A[random_order][:, random_order]
matshow(A_randomized)
colorbar()
我想重新排序A_randomized
以最大化与B的重叠,如下所示:
x, y = numpy.where(A==1)
scatter(y,30-x, label='A')
x, y = numpy.where(B==1)
x+=5
y+=5
scatter(y,30-x, marker='.', label='B')
legend()
我想使用numpy和scipy.sparse库在python中实现该算法。