Saya ingin mencari mean dan deviasi standar dari digit ke-1, ke-2, ... dari beberapa daftar (Z). Misalnya, saya punya
A_rank=[0.8,0.4,1.2,3.7,2.6,5.8]
B_rank=[0.1,2.8,3.7,2.6,5,3.4]
C_Rank=[1.2,3.4,0.5,0.1,2.5,6.1]
# etc (up to Z_rank )...
Sekarang saya ingin mengambil mean dan std dari *_Rank[0]
, mean dan std dari *_Rank[1]
, dll.
(Yaitu: mean dan std dari digit pertama dari semua daftar (A..Z) _rank;
mean dan std dari digit ke-2 dari semua daftar (A..Z) _rank;
mean dan std dari digit ke-3 ...; dll).
python
list
standard-deviation
physics_for_all
sumber
sumber
Jawaban:
Karena Python 3.4 / PEP450 ada
statistics module
di pustaka standar, yang memiliki metodestdev
untuk menghitung deviasi standar dari iterable seperti milik Anda:sumber
pstddev
disebutkan bahwa mungkin sebaiknya digunakan jika daftar Anda mewakili seluruh populasi (yaitu, daftar tersebut bukan sampel dari suatu populasi).stddev
dihitung menggunakan varian sampel dan akan melebih-lebihkan rata-rata populasi.stdev
danpstdev
, tidak digunakanstd
untukstandard
seperti yang diharapkan. Saya tidak dapat mengedit posting karena pengeditan perlu memodifikasi setidaknya 6 karakter ...Saya akan memasukkan
A_Rank
et al ke dalam array 2D NumPy , dan kemudian menggunakannumpy.mean()
dannumpy.std()
menghitung sarana dan deviasi standar:sumber
STDEV.P()
dan fungsi Numpystd(ddof=0)
menghitung sd populasi , atau sd sampel yang tidak dikoreksi , sedangkan fungsi ExcelSTDEV.S()
dan fungsi Numpystd(ddof=1)
menghitung (dikoreksi) sampel sd, yang sama dengan sqrt (N / (N-1) ) dikalikan populasi sd, dengan N adalah jumlah poin. Lihat lebih lanjut: en.m.wikipedia.org/wiki/…Berikut beberapa kode Python murni yang dapat Anda gunakan untuk menghitung mean dan deviasi standar.
Semua kode di bawah ini didasarkan pada
statistics
modul di Python 3.4+.Catatan: untuk meningkatkan akurasi saat menjumlahkan float,
statistics
modul menggunakan fungsi kustom_sum
daripada built-insum
yang saya gunakan sebagai gantinya.Sekarang kita punya contoh:
sumber
pvar=ss/(n-1)
?n-1
. Kode di atas adalah untuk SD populasi (jadi adan
derajat kebebasannya).stddev
fungsinya sehingga dapat menghitung deviasi standar sampel dan populasi.Di Python 2.7.1, Anda dapat menghitung deviasi standar menggunakan
numpy.std()
untuk:numpy.std()
tanpa argumen tambahan selain daftar data Anda.Ini menghitung std sampel daripada std populasi.
sumber
Di python 2.7 Anda dapat menggunakan NumPy yang
numpy.std()
memberikan deviasi standar populasi .Dalam Python 3.4
statistics.stdev()
mengembalikan simpangan baku sampel. Thepstdv()
fungsi sama dengannumpy.std()
.sumber
Menggunakan python, berikut beberapa metode:
Approach1 - menggunakan sebuah fungsi
Pendekatan2: hitung varians dan ambil akar kuadratnya
Pendekatan3: menggunakan matematika dasar
catatan:
variance
menghitung varians populasi sampelpvariance
menghitung varians dari seluruh populasistdev
danpstdev
sumber
kode python murni:
sumber
sqrt(sum((x - mean)**2 for x in lst) / len(lst))
Jawaban lain mencakup bagaimana melakukan std dev dengan python secara memadai, tetapi tidak ada yang menjelaskan bagaimana melakukan traversal aneh yang telah Anda jelaskan.
Saya akan berasumsi AZ adalah seluruh populasi. Jika tidak, lihat jawaban OME tentang cara mengambil kesimpulan dari suatu sampel.
Jadi untuk mendapatkan simpangan baku / mean dari digit pertama dari setiap daftar, Anda memerlukan sesuatu seperti ini:
Untuk mempersingkat kode dan menggeneralisasikannya ke digit ke mana pun, gunakan fungsi berikut yang saya buat untuk Anda:
Sekarang Anda bisa mendapatkan stdd dan mean dari semua tempat ke-n dari AZ seperti ini:
sumber
str([chr(x)+'_rank[n]' for x in range(65,65+26)]).replace("'", "")