我正在尝试寻找在Python中执行以下成对距离计算的最快方法。我想使用这些距离来通过它们的相似性对list_of_objects
进行排序。
list_of_objects
中的每个项都由四个测量值a、b、c、d表征,这些测量值在非常不同的比例尺上进行,例如:
object_1 = [0.2, 4.5, 198, 0.003]
object_2 = [0.3, 2.0, 999, 0.001]
object_3 = [0.1, 9.2, 321, 0.023]
list_of_objects = [object_1, object_2, object_3]
目标是获取list_of_objects
中对象的成对距离矩阵。但是,我希望能够通过一个权重向量来指定每个测量在我的距离计算中的"相对重要性",例如:
weights = [1, 1, 1, 1]
这意味着所有的测量都具有相等的权重。在这种情况下,我希望每个测量对物体之间的距离产生同样的贡献,而不考虑测量尺度。或者:
weights = [1, 1, 1, 10]
我希望测量d对于对象之间的距离贡献是其他测量的10倍。
我的当前算法如下:
- 为每个测量计算成对的距离矩阵
- 归一化每个距离矩阵,使最大值为1
- 将每个距离矩阵乘以
weights
中的相应权重 - 求和距离矩阵以生成单个成对矩阵
- 使用步骤4中的矩阵提供
list_of_objects
的对象对的排序列表
这个方法很好用,可以给出物体之间带权重的曼哈顿距离。
我的问题有两个:
在不改变算法的情况下,SciPy、NumPy或SciKit-Learn中最快的实现是什么,可以执行初始距离矩阵的计算。
是否存在一个现有的多维距离方法,可以自动完成所有的步骤?
对于问题2,我已经搜索过了,但没有找到任何内置步骤能够按照我想要的方式进行“相对重要性”的距离计算。
欢迎提出其他建议。如果我漏掉了细节,很乐意进行澄清。