首页 > 解决方案 > Numpy - 从距离矩阵中提取唯一值

问题描述

输入数据:

我有以下内容distance_matrix

  [[1.        , 0.14285714, 0.25      , 0.83333333, 0.63636364],
   [0.14285714, 1.        , 0.33333333, 0.84615385, 0.66666667],
   [0.25      , 0.33333333, 1.        , 0.76923077, 0.58333333],
   [0.83333333, 0.84615385, 0.76923077, 1.        , 0.69230769],
   [0.63636364, 0.66666667, 0.58333333, 0.69230769, 1.        ]]

当前结果:

np.where(distane_matrix <= 0.25)返回以下输出:

(array([0, 0, 1, 2]), array([1, 2, 0, 0]))

期望的结果:

(array([0, 0]), array([1, 2]))

解释:

用文字来表达,因为我知道:

  1. [0,1]具有相同的价值[1,0]
  2. [0,2]具有相同的价值[2,0]
  3. [0,1][0,2]满足要求np.where()

不想在输出中返回,因为它是冗余信息[1,0][2,0]做这个的最好方式是什么?

标签: pythonarraysnumpyscipy

解决方案


假设d是一个指定的距离矩阵。

演示:

In [28]: r = np.triu(d, 1)

In [29]: r
Out[29]:
array([[0.        , 0.14285714, 0.25      , 0.83333333, 0.63636364],
       [0.        , 0.        , 0.33333333, 0.84615385, 0.66666667],
       [0.        , 0.        , 0.        , 0.76923077, 0.58333333],
       [0.        , 0.        , 0.        , 0.        , 0.69230769],
       [0.        , 0.        , 0.        , 0.        , 0.        ]])

In [30]: np.where((r>0) & (r<=0.25))
Out[30]: (array([0, 0], dtype=int64), array([1, 2], dtype=int64))

推荐阅读