考虑这个非常简单的示例,其中我计算了一些数据的成对距离矩阵:
import numpy as np
from sklearn.metrics import pairwise_distances
import matplotlib.pyplot as plt
data = [[0, 1], [5, 6], [5, 6], [5,6], [0, 1], [0, 1]]
dist = pairwise_distances(data)
plt.imshow(dist)
这似乎是一项常见的任务,必须有一个scipy
或sklearn
函数,但我找不到任何函数。
感谢您的帮助!
编辑: 需要明确的是:我希望根据距离值本身对矩阵进行排序。
同时对行和列进行聚类可以实现这一点,但是我不知道如何做到这一点。
答案 0 :(得分:2)
似乎您要尝试执行的操作似乎在某种程度上等效于clustering algorithms-即将彼此靠近的元素分组,从而形成多个元素簇。一旦有了这些聚类,每个聚类中的距离应比其余距离小,然后您只需为每个组排列块即可。
您可能想看一下已经在Python中实现的集群算法 here的一个很好的比较;而某些聚类算法需要您预先指定期望的聚类,而另一些则可能更容易控制参数。
使用聚类,您的算法应为:
如何对每个聚类中的元素进行排序,或者如何对聚类进行排序(可能因为我们需要对“对角线尽可能大”的正确定义)还不够明确,但是看看这是否对您有用?