2013-10-28 27 views
6

BenEntegrasyon sadece

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

işlev Ama olumsuz alanları izin vermek istemiyoruz trapz ayrılmaz kullanarak numpys aşağıdaki hesaplamak için isterler. Bunu yapmak için etkili bir yol var mı yoksa minimum noktayı aramak ve diziyi el ile dönüştürmek zorunda mıyım?

numpy.trapz(numpy.abs([-1, 1])) mantıklı mı? Eğer biz sadece np.trapzsource code yakalayabilir entegre alana olumsuz katkıları atmak ve bunu yeniden yazmak istiyorsanız

+0

evet 'np.trapz (np.abs ([- 1, 1])).' Yapar mantıklı ama ayrılmaz değer olacaktır, bu durumda, pozitif alanın değerinin iki katı, bu durumda olan uygun oranı, bölerek zorunda bunu '2' ... –

+0

siz "negatif derken alanlar "y", sıfırdan daha az veya entegrasyon hacmine negatif katkılar anlamına mı geliyor? – Daniel

+0

Grafikte, bulunduğu koordinat sisteminden bağımsız bir alana sahip olmak istiyorum. Bunun kapalı olmayan yüzeylerle mümkün olmadığını biliyorum. Bence abs almak hile yapar. @SaulloCastro Genel durumdaki oranı nasıl karşılayacaksınız? – anopheles

cevap

2

:

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 

hızlı testi:

np.trapz([-1,0,1]) 
0.0 

abstrapz([-1,0,1]) 
0.5 

sadece kaçınmak istiyorsanız y sıfır daha az olan alanlar, sadece o zaman 'y' değeri daha maskesi sıfır sıfır:

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 

Bu bunu yapmak için en iyi yol değildir, ama iyi bir tahmindir. Bu demek istiyorsan, bunu güncelleyebilirim.

Hep tanım gereği 0 dönecektir hafifçe trapz([-1,1]) olarak örnek değiştirmek zorunda kaldı. Biz bunu geri ekleyin kolaydır çok boyutlu diziler üzerinde bunu yapmak gerekirse, bazı işlevleri bu şekilde kaldırmak yapmak

+0

[ret> 0] yaparak, her negatif katkıyı atmıyor musunuz? Geleneksel anlamda bir alana sahip olmak istiyorum, yani her alt havayı olumlu olarak ele almak istiyorum. Örneğinizde, yalnızca negatif değerlere sahip bir dizi sıfırın bir yüzeyine sahiptir. İstediğim bu değil. – anopheles