找到k个最近的邻居

时间:2016-07-27 14:40:17

标签: python numpy

我有一个矩阵

<?php
if ($result2->num_rows > 0) {
  // output data of each row
    while($row = $result2->fetch_assoc()) {
          echo "<div class='form-group'>
                    <label>Name</label>
                    <input class='form-control' value='". $row["Name"] . "'>
                </div>
                <div class='form-group'>
                    <label>email</label>
                    <input class='form-control' value='". $row["email"] . "'>
                </div>
                <div class='form-group'>
                    <label>City</label>
                    <select class='form-control'>";
                        foreach($cities as $city){
                           echo "<option".(($city == $row["City"])?" selected":"").">". $city ."</option>";
                        }
                    echo "</select>
                </div>";
        }
    }
?>

我看到这段代码获取k个最近邻居的索引:

a = np.array([[ 8.6569141 ,  8.19847655,  7.83540289,  8.49673563],
              [ 7.86962825,  9.16869072,  8.60084933,  8.91840291],
              [ 9.61896688,  9.69620637,  9.1879124 ,  9.87479709],
              [ 9.17427532,  8.98877464,  8.4313078 ,  7.81914999]])

输出:

k = 1
index = a.argsort()[:, :k]

有人可以提供有关这些输出指数的解释吗?

1 个答案:

答案 0 :(得分:0)

NumPy的argsort返回对数组进行排序的索引:

In [864]: a.argsort()
Out[864]: 
array([[2, 1, 3, 0],
       [0, 2, 3, 1],
       [2, 0, 1, 3],
       [3, 2, 1, 0]], dtype=int64)

此输出告诉您按升序排序的a第一行元素的索引为213和{{1 }}。第二行元素的索引是0023,依此类推。

如果您定义了1k = 1只是上面数组的第一列:

a.argsort()[:, :k]

因此,您的代码返回一个In [865]: a.argsort()[:, :k] Out[865]: array([[2], [0], [2], [3]], dtype=int64) 数组,使得j th 元素包含索引(即列),其中j th <的最小值/ sup>数组4 × 1的行,换句话说,是j th 训练样本的最近邻居的索引。