Jeśli chcesz odrzucić negatywne składki do zintegrowanego obszaru możemy po prostu chwycić np.trapz
source code i przepisać go:
def abstrapz(y, x=None, dx=1.0):
y = np.asanyarray(y)
if x is None:
d = dx
else:
x = np.asanyarray(x)
d = np.diff(x)
ret = (d * (y[1:] +y[:-1])/2.0)
return ret[ret>0].sum() #The important line
Szybki test:
np.trapz([-1,0,1])
0.0
abstrapz([-1,0,1])
0.5
Jeśli chcesz po prostu uniknąć obszary, w których y
jest mniejsza niż zero, po prostu maskują wartości "y" mniejsze niż zero do zera:
arr = np.array([-2,-1,0.5,1,2,1,0,5,3,0])
np.trapz(arr)
10.5
arr[arr<0] = 0
np.trapz(arr)
12.5
To nie jest najlepszy sposób, ale jest to dobre przybliżenie. Jeśli to masz na myśli, mogę to zaktualizować.
Musiałem zmienić nieco przykład, ponieważ trapz([-1,1])
zawsze zwróci 0 z definicji. Usuwamy niektóre funkcje w ten sposób, jeśli musisz to zrobić na tablicach wielowymiarowych, łatwo jest je dodać ponownie.
tak, 'np.trapz (np.abs ([- 1, 1])) sens, ale wartość integralna będzie w tym przypadku podwójną wartością obszaru dodatniego, więc musisz podzielić go przez odpowiedni stosunek, który w tym przypadku wynosi "2" ... –
Kiedy mówisz "negatywny obszary "masz na myśli" y "wartości mniej niż zero lub ujemne wkłady do wielkości integracji? – Daniel
Chcę mieć obszar wykresu, który jest niezależny od układu współrzędnych, w którym się znajduje. Wiem, że nie jest to możliwe w przypadku powierzchni niezamkniętych. Wydaje mi się, że zajęcie się absurdem działa. @SaulloCastro Jak można zrekompensować współczynnik w ogólnym przypadku? – anopheles