Seite 1 von 1
Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 09:35
von Squipy
Hallo,
gibt es eine effiziente Möglichkeit um zu prüfen ob bspw. 5 Zahlenwerte eines arrays in Reihe gleich sind? Wert und Position sind unbekannt.
Besten Dank!
Re: Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 09:58
von Jankie
Array oder Liste?
Die ersten 5? Hat die Liste nur 5 Elemente insgesamt? Wenn du einfach nür prüfen willst ob die gesuchte Sequenz irgendwo in der Liste vorkommt würde ich das so machen, dafür ist die Sequenz die gesucht wird aber erforderlich:
Code: Alles auswählen
numbers = [1,2,3,4,5,6,7]
sequenz_to_look_for_1 = [3,5,6]
sequenz_to_look_for_2 = [2,3,4,5]
print("".join([str(number) for number in sequenz_to_look_for_1]) in "".join([str(number) for number in numbers]))
print("".join([str(number) for number in sequenz_to_look_for_2]) in "".join([str(number) for number in numbers]))
Das ganze kann man auch noch in eine Funktion packen:
Code: Alles auswählen
numbers = [1,2,3,4,5,6,7]
sequenz_to_look_for_1 = [3,5,6]
sequenz_to_look_for_2 = [2,3,4,5]
def check_if_sequenz_is_in_list(list, sequenz):
return "".join([str(number) for number in sequenz]) in "".join([str(number) for number in list])
print(check_if_sequenz_is_in_list(numbers, sequenz_to_look_for_1))
print(check_if_sequenz_is_in_list(numbers, sequenz_to_look_for_2))
Re: Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 10:04
von Sirius3
Code: Alles auswählen
In [1]: import numpy as np
In [2]: werte = np.random.random(30)
In [3]: werte[7:7+5] = werte[7]
In [4]: windows = np.lib.stride_tricks.as_strided(werte, (werte.size - 5 + 1, 5), werte.strides*2)
In [5]: windows.max(axis=1) - windows.min(axis=1)
Out[5]:
array([0.71426446, 0.71426446, 0.80783698, 0.80783698, 0.7449869 ,
0.7449869 , 0.7449869 , 0. , 0.1535455 , 0.28254629,
0.35209247, 0.53512758, 0.53512758, 0.53512758, 0.36881581,
0.43843173, 0.47240975, 0.47240975, 0.34931615, 0.37189768,
0.37189768, 0.37189768, 0.39833713, 0.56927844, 0.44090621,
0.5208942 ])
In [6]: np.where(windows.max(axis=1) - windows.min(axis=1) == 0)
Out[6]: (array([7], dtype=int64),)
Re: Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 10:18
von Jankie
Wenn du zwei Listen hast und nur prüfen willst ob irgendwo in den zwei Listen eine folge von 5 Elementen identisch ist:
Code: Alles auswählen
numbers1 = [1,2,3,4,5,6,7,8,9,10,11]
numbers2 = [1,2,3,4,5,6,7,8,3,10,11]
def have_similarities(list_a, list_b):
for i in range(len(list_a)):
sublist_a = list_a[i:i+5]
if len(sublist_a) == 5:
for x in range(len(list_b)):
sublist_b = list_b[x:x+5]
if sublist_a == sublist_b:
print("FOUND")
break
have_similarities(numbers1, numbers2)
bzw. so wenn die Anzahl der aufeinanderfolgenden Zahlen variabel ist.
Code: Alles auswählen
numbers1 = [1,2,3,4,5,6,7,8,9,10,11]
numbers2 = [1,2,3,4,5,6,7,7,3,10,11]
def have_similarities(list_a, list_b, sequenz_lenght):
for i in range(len(list_a)):
sublist_a = list_a[i:i+sequenz_lenght]
if len(sublist_a) == sequenz_lenght:
for x in range(len(list_b)):
sublist_b = list_b[x:x+sequenz_lenght]
if sublist_a == sublist_b:
return True
return False
print(have_similarities(numbers1, numbers2, 8))
Re: Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 11:22
von kbr
@Sirius3: Was numpy nicht alles so bietet. Mit dem Trick erkennt man auch, ob es mehr als fünf Elemente in Folge sind.
Re: Array prüfen ob Werte in folge gleich sind
Verfasst: Donnerstag 3. September 2020, 15:54
von Squipy
Sirius3 hat geschrieben: Donnerstag 3. September 2020, 10:04
Code: Alles auswählen
In [1]: import numpy as np
In [2]: werte = np.random.random(30)
In [3]: werte[7:7+5] = werte[7]
In [4]: windows = np.lib.stride_tricks.as_strided(werte, (werte.size - 5 + 1, 5), werte.strides*2)
In [5]: windows.max(axis=1) - windows.min(axis=1)
Out[5]:
array([0.71426446, 0.71426446, 0.80783698, 0.80783698, 0.7449869 ,
0.7449869 , 0.7449869 , 0. , 0.1535455 , 0.28254629,
0.35209247, 0.53512758, 0.53512758, 0.53512758, 0.36881581,
0.43843173, 0.47240975, 0.47240975, 0.34931615, 0.37189768,
0.37189768, 0.37189768, 0.39833713, 0.56927844, 0.44090621,
0.5208942 ])
In [6]: np.where(windows.max(axis=1) - windows.min(axis=1) == 0)
Out[6]: (array([7], dtype=int64),)
Klasse, wie immer!
Danke