我有2个数组list1
和list2
list1 = np.array([1052, 1092, 1117,1135, 1156,1212,1249,1325,1363,1380,1382,1400,1484])
list2 = np.array([1053.435, 1093.698, 1118.342, 1136.697,
1157.832, 1212.938, 1215.741, 1250.266, 1252.352,
1254.453, 1256.831, 1259.182, 1326, 1367.228,
1400, 1410, 1740])
对于list1
中的每个元素我想在list2
中找到最接近的元素并返回其索引。
mylist = []
for idxlabel in range(0,len(list1)):
a = min(enumerate(list2), key=lambda x:abs(x[1]-list1[idxlabel]))
print a
mylist.append(np.copy(a))
我的问题是,list2
中的一个元素被发现为"最佳匹配"我想将其从搜索中删除,以避免list1
中的不同元素与list2
中的相同元素匹配
(0, 1053.4349999999999)
(1, 1093.6980000000001)
(2, 1118.3420000000001)
(3, 1136.6969999999999)
(4, 1157.8320000000001)
(5, 1212.9380000000001)
(7, 1250.2660000000001)
(12, 1326.0)
(13, 1367.2280000000001)
(13, 1367.2280000000001)
(13, 1367.2280000000001)
(14, 1400.0)
(15, 1410.0)
在这个例子中,list1的第9个第10个和第11个元素与list2
的第13个元素匹配,这是不可取的...
答案 0 :(得分:0)
可能不是最好的方法,但您可以保留该list2数组的副本,并在每次找到匹配项时对其进行修改。像这样:
list2aux = list(list2)
mylist = []
for idxlabel in range(0,len(list1)):
a = min(enumerate(list2aux), key=lambda x:abs(x[1]-list1[idxlabel]))
list2aux[a[0]] = 0
print(a)
mylist.append(np.copy(a))
将list2aux中的该元素更改为0将使已经选择为最佳匹配的值不再被选中。