重新排序稀疏矩阵以最大化参考稀疏矩阵的重叠

时间:2018-01-19 07:35:44

标签: python numpy matrix scipy sparse-matrix

我有一个二进制方形稀疏矩阵 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()

matrix B

现在我通过向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()

matrix A

现在我随机化了矩阵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

我想重新排序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()

enter image description here

我想使用numpy和scipy.sparse库在python中实现该算法。

0 个答案:

没有答案