【问题标题】:Comparing multidimensional lists and return the intersected index比较多维列表并返回相交索引
【发布时间】:2020-02-09 17:40:35
【问题描述】:

我尝试根据internet 中的一些示例编写和编辑代码,如下所示:

from math import sqrt

# calculate the Euclidean distance between two vectors
def euclidean_distance(row1, row2):
    distance = 0.0
    for i in range(len(row1)-1):
        distance += (row1[i] - row2[i])**2
    return sqrt(distance)

# Locate the clostest neighbors
def get_neighbors(train, test_row, num_neighbors):
    distances = list()
    for train_row in train:
        dist = euclidean_distance(test_row, train_row)
        distances.append((train_row, dist))
    distances.sort(key=lambda tup: tup[1])
    neighbors = list()
    for i in range(num_neighbors):
        neighbors.append(distances[i][0])
    return neighbors

# Test distance function
dataset = [[2.7810836,2.550537003,0],
    [1.465489372,2.362125076,0],
    [3.396561688,4.400293529,0],
    [1.38807019,1.850220317,0],
    [3.06407232,3.005305973,0],
    [7.627531214,2.759262235,1],
    [5.332441248,2.088626775,1],
    [6.922596716,1.77106367,1],
    [8.675418651,-0.242068655,1],
    [7.673756466,3.508563011,1]]
neighbors = get_neighbors(dataset, dataset[0], 3)

#set(dataset) & set(neighbors)

#type(neighbors) is int
#set(dataset).intersection(neighbors)

for neighbor in neighbors:
    print(neighbor)

我想做的是:

  1. 获取最近的 3 个邻居,
  2. 将最近的邻居与“数据集”进行比较,
  3. 返回匹配的数据点的索引。

例如: 从上面的代码,结果是:

[2.7810836, 2.550537003, 0]
[3.06407232, 3.005305973, 0]
[1.465489372, 2.362125076, 0]

我想要的最终结果是:

结果 = [1, 5, 2]

假设数据索引从 1 而不是 0 开始,则它是距所选数据点(包括其自身)最近的 3 个邻居的数据集索引。

【问题讨论】:

    标签: python python-3.x machine-learning data-mining nested-lists


    【解决方案1】:

    您的代码中的错误是您从获取邻居函数返回行本身。为了解决这个问题,换行:

    neighbors.append(distances[i][0])
    

    neighbors.append(train.index(distances[i][0]) + 1)
    

    在完整的行列表中找到该行的索引,并在您希望索引从 1 开始时递增 1。

    结果是现在

    [1, 5, 2]
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-04
      • 1970-01-01
      • 1970-01-01
      • 2016-12-23
      • 1970-01-01
      • 2012-05-09
      相关资源
      最近更新 更多