2013-10-28 16 views
6

Chcę móc obliczyć całkę z wykorzystaniem numpys trapz funkcjonująIntegracja w numpy tablicy z pozytywnym obszarze tylko

numpy.trapz([-1, 1]) # returns 0 

Ale nie chcą zezwolić obszary ujemne. Czy istnieje skuteczny sposób, aby to zrobić, czy muszę szukać punktu minimalnego i ręcznie przekształcać tablicę?

Czy numpy.trapz(numpy.abs([-1, 1])) ma sens?

+0

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" ... –

+0

Kiedy mówisz "negatywny obszary "masz na myśli" y "wartości mniej niż zero lub ujemne wkłady do wielkości integracji? – Daniel

+0

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

Odpowiedz

2

Jeśli chcesz odrzucić negatywne składki do zintegrowanego obszaru możemy po prostu chwycić np.trapzsource 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.

+0

Wykonując ret [ret> 0] nie odrzucasz po prostu każdej ujemnej wpłaty? Chcę mieć obszar w tradycyjnym sensie, tj. Traktować każdy podobszar pozytywny. W twoim przykładzie tablica z wartościami ujemnymi ma powierzchnię zero. Nie tego chcę. – anopheles