Wie finde ich die nächsten Elemente in zwei Arrays ohne Wiederholungen [dupliziert] und gebe die Indizes von zwei Arrays in Python zurück?

nilou.mhy

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

Rithin Chalumuri

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.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

TOP Liste

heißlabel

Archiv