Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/302.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 比较多维列表并返回相交索引_Python_Python 3.x_Machine Learning_Data Mining_Nested Lists - Fatal编程技术网

Python 比较多维列表并返回相交索引

Python 比较多维列表并返回相交索引,python,python-3.x,machine-learning,data-mining,nested-lists,Python,Python 3.x,Machine Learning,Data Mining,Nested Lists,我尝试根据以下示例编写和编辑代码: 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(distanc

我尝试根据以下示例编写和编辑代码:

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)
我想做的是:

  • 找到三个最近的邻居
  • 将这些最近的邻居与“数据集”进行比较
  • 返回匹配的数据点的索引
  • 例如: 根据上面的代码,结果是:

    [2.7810836, 2.550537003, 0]
    [3.06407232, 3.005305973, 0]
    [1.465489372, 2.362125076, 0]
    
    我希望得到的最终结果是:

    结果=[1,5,2]


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

    代码中的错误是,您从get Neights函数返回了行本身。要解决此问题,请更改行:

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

    它在完整的行列表中查找该行的索引,并按照您希望索引从1开始的顺序递增1

    结果是现在

    [1, 5, 2]
    

    代码中的错误是,您从get neights函数返回了行本身。要解决此问题,请更改行:

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

    它在完整的行列表中查找该行的索引,并按照您希望索引从1开始的顺序递增1

    结果是现在

    [1, 5, 2]