Ausgewählte Array Werte linear interpolieren
Verfasst: Sonntag 21. August 2022, 16:42
Hallo zusammen,
ich habe ein zweidimensionales Array und möchten bei überschreiten einer Schwelle eine andere Zeile linear interpolieren. Ich habe das Probelm über mehrere aneinandergereihte For-Schleifen/ list comprehensions gelöst, vermute aber dass man das geschickter machen kann.
Danke für die Hilfe.
ich habe ein zweidimensionales Array und möchten bei überschreiten einer Schwelle eine andere Zeile linear interpolieren. Ich habe das Probelm über mehrere aneinandergereihte For-Schleifen/ list comprehensions gelöst, vermute aber dass man das geschickter machen kann.
Danke für die Hilfe.
Code: Alles auswählen
array = np.array([[5, 8, 3, 2, 5, 6, 3, 7, 3, 7, 8, 5, 4, 5],
[0.5, 0.2, 0.7, 0.9, 0.9, 0.85, 0.2, 0.2, 0.9, 0.85, 0.2, 0.85, 0.95, 0.5],
[20, 21, 25, 27, 23, 20, 19, 18, 16, 17, 16, 19, 23, 24]])
# find out critical indices
a = [x[0] for x in enumerate(array[1, :]) if x[1] < 0.8]
# find out where critical indices are not in line
z = [[a[x], a[x + 1]] for x in range(len(a) - 1) if (a[x + 1] - a[x]) > 1]
# calculate linear interpolation
b = [(array[2, z[x][0]] + np.cumsum(array[0][z[x][0] + 1:z[x][1]]) * (array[2, z[x][1]] - array[2, z[x][0]]) / sum(
array[0][z[x][0]+1:z[x][1]]+1)) for x in range(len(z))]
# insert into base array
li = array[2, :].tolist()
j = 0
for i in b:
li[z[j][0] + 1: z[j][1]] = i
j += 1
array[2, :] = li
print(array)