SORU
23 Temmuz 2009, PERŞEMBE


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
28 AĞUSTOS 2009, Cuma


Cevap çok net sonra tanımlanan Welford algoritması kullanmaktır "saf yöntemleri"

İ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

Ayrıca benim Java uygulamaya bir göz atabilirsiniz; javadoc, kaynak ve birim testlerini çevrimiçi

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • Google Developers

    Google Devel

    23 AĞUSTOS 2007
  • Mark Brown

    Mark Brown

    9 HAZİRAN 2010
  • YouChewBu

    YouChewBu

    26 Ocak 2009