Nasıl verimli çalışan bir standart sapmayı hesaplamak için?
Numaraları listeleri, örneğin bir dizi var:
[0] (0.01, 0.01, 0.02, 0.04, 0.03)
[1] (0.00, 0.02, 0.02, 0.03, 0.02)
[2] (0.01, 0.02, 0.02, 0.03, 0.02)
...
[n] (0.01, 0.00, 0.01, 0.05, 0.03)
Yapmak istediğim şey, tüm dizi elemanları arasında bir liste her dizindeki ortalama ve standart sapmayı hesaplamak, verimli.
Yani, bir dizi döngü ve bir liste belirli bir dizin değeri toplamak olmuştur. Sonunda, "listesi" n
. ortalamalar benim her değer ürettim
Standart sapma, yani hesaplanan şimdi tekrar döngü.
SD bir niyetim yok sonra () demek için diziyi iki kez, bir kez ve sonra bir kez önüne geçmek istiyorum.
Her iki değer hesaplanırken, sadece dizi için etkili bir yöntem var bir kere? Yorumlanan bir dil (örneğin Perl veya Python) veya yalancı bir herhangi bir kod gayet iyi.
CEVAP
Cevap çok net sonra tanımlanan Welford algoritması kullanmaktır "saf yöntemleri"
- Wikipedia: Algorithms for calculating variance
İki-pass ya da kareler online basit bir toplamı ya da koleksiyoncular diğer yanıtlar önerilen daha sayısal olarak daha istikrarlı. Sadece gerçekten neden olarak birbirine yakın olan değerler var önemli olan istikrar olarak "catastrophic cancellation" kayan nokta edebiyat.
Ayrıca numune sayısına (N) ve N-1 varyans hesaplama ile bölerek (sapma Kare) arasındaki fark tazelemek isteyebilirsiniz. Bölünerek N-1 önde bir tarafsız tahmin varyansı örnek, oysa bölerek N ortalama hafife varyans (çünkü gelmiyor hesaba varyans arasındaki örnek ortalaması ve gerçek demek).
Daha fazla bilgi, daha önceki değerleri çevrimiçi silmek için nasıl dahil olmak üzere, gitmek: bu konuda iki blog girişleri yazdım
- Computing Sample Mean and Variance Online in One Pass
- Deleting Values in Welford’s Algorithm for Online Mean and Variance
Ayrıca benim Java uygulamaya bir göz atabilirsiniz; javadoc, kaynak ve birim testlerini çevrimiçi
Nasıl verimli bir şekilde anahtarları/...
Nasıl bir hizmet Android üzerinde çalı...
Nasıl PHP kullanarak iki tarih arasınd...
Nasıl çalışan bir JAR dosyası yolunu a...
Nasıl bir web sitesi için standart olm...