Ich habe 2 Arrays Liste1 und Liste2
list1= np.array([0. , 0.09705882, 0.19411765, 0.29117647, 0.38823529,
0.48529412, 0.58235294, 0.67941176, 0.77647059, 0.87352941,
0.97058824, 1.06764706, 1.16470588, 1.26176471, 1.35882353,
1.45588235, 1.55294118, 1.65 , 1.74705882, 1.84411765,
1.94117647, 2.03823529, 2.13529412, 2.23235294, 2.32941176,
2.42647059, 2.52352941, 2.62058824, 2.71764706, 2.81470588,
2.91176471, 3.00882353, 3.10588235, 3.20294118, 3.3 ,
3.39705882, 3.49411765, 3.59117647, 3.68823529, 3.78529412,
3.88235294, 3.97941176, 4.07647059, 4.17352941, 4.27058824,
4.36764706, 4.46470588, 4.56176471, 4.65882353, 4.75588235,
4.85294118, 4.95 , 5.04705882, 5.14411765, 5.24117647,
5.33823529, 5.43529412, 5.53235294, 5.62941176, 5.72647059,
5.82352941, 5.92058824, 6.01764706, 6.11470588, 6.21176471,
6.30882353, 6.40588235, 6.50294118, 6.6 ])
list2=np.array([3.3 , 3.2 , 3.1 , 3. , 2.9 , 2.8 , 2.7 , 2.6 , 2.5 , 2.4 , 2.3 ,
2.2 , 2.1 , 2. , 1.9 , 1.8 , 1.7 , 1.6 , 1.5 , 1.4 , 1.3 , 1.2 ,
1.1 , 1.05, 0.95, 0.85, 0.75, 0.7 , 0.6 , 0.5 , 0.4 , 0.3 , 0.2 ,
0.1 , 0])
Für jedes Element in a möchte ich das nächste Element in b finden und den Index von beiden zurückgeben
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))
Mein Problem ist, dass ich, nachdem ein Element in Liste2 als "beste Übereinstimmung" gefunden wurde, den Index beider Elemente in Arrays drucken möchte, deren Werte nahe beieinander liegen. Außerdem möchte ich ihn aus der Suche entfernen, um dieses unterschiedliche Element in zu vermeiden list1 stimmt mit demselben Element in list2 überein
(34, 0.0)
(33, 0.1)
(32, 0.2)
(31, 0.3)
(30, 0.4)
(29, 0.5)
(28, 0.6)
(27, 0.7)
(26, 0.75)
(25, 0.85)
(24, 0.95)
(23, 1.05)
(21, 1.2)
(20, 1.3)
(19, 1.4)
(18, 1.5)
(17, 1.6)
(16, 1.7)
(15, 1.8)
(14, 1.9)
(13, 2.0)
(12, 2.1)
(11, 2.2)
(10, 2.3)
(9, 2.4)
(8, 2.5)
(7, 2.6)
(6, 2.7)
(5, 2.8)
(4, 2.9)
(3, 3.0)
(2, 3.1)
(1, 3.2)
(0, 3.3)
(22, 1.1)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
(0, 0)
In diesem Beispiel wird der Nullwert wiederholt !!! Und der Index eines Arrays wird angezeigt, wenn ich den Index beider Elemente in Arrays benötige, deren Werte nahe beieinander liegen
Sie können verwenden numpy.where()
, um Indizes übereinstimmender Elemente in Numpy-Arrays abzurufen.
In Anbetracht der beiden obigen Listen können Sie den folgenden Code ausprobieren (ohne Elemente aus list2 zu entfernen, nachdem sie gefunden wurden):
for i in range(len(list1)):
temp_result = abs(list1[i] - list2) #Matrix subtraction
min_val = np.amin(temp_result) #Getting the minimum value to get closest element
min_val_index = np.where(temp_result == min_val) #To find index of minimum value
closest_element = list2[min_val_index] #Actual value of closest element in list2
print(i, list1[i], min_val_index[0][0], closest_element[0])
Wenn Elemente entfernt werden, sobald sie in Liste2 gefunden werden, ist Liste2 möglicherweise leer. Um Laufzeitfehler zu vermeiden, ist die Sicherheitsüberprüfung vorhanden.
for i in range(len(list1)):
if (len(list2)) > 1: #When there are elements in list2
temp_result = abs(list1[i] - list2) #Matrix subtraction
min_val = np.amin(temp_result) #Getting the minimum value to get closest element
min_val_index = np.where(temp_result == min_val) #To find index of minimum value
closest_element = list2[min_val_index] #Actual value of closest element in list2
list2 = list2[list2 != closest_element] #Remove closest element after found
print(i, list1[i], min_val_index[0][0], closest_element[0]) #List1 Index, Element to find, List2 Index, Closest Element
else: #All elements are already found
print(i, list1[i], 'No further closest unique closest elements found in list2')
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen