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]