Saya harus mencari rata-rata dari sebuah daftar dalam Python. Ini adalah kode saya sejauh ini
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print reduce(lambda x, y: x + y, l)
Saya sudah mendapatkannya sehingga ia menambahkan nilai-nilai dalam daftar, tetapi saya tidak tahu bagaimana cara membaginya?
Pada Python 3.4+ Anda dapat menggunakan statistics.mean()
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import statistics
statistics.mean(l) # 20.11111111111111
Pada versi Python yang lebih lama Anda dapat melakukan
sum(l) / len(l)
Pada Python 2 Anda perlu mengkonversi len
ke float untuk mendapatkan pembagian float
sum(l) / float(len(l))
Tidak perlu menggunakan reduce
. Ini jauh lebih lambat dan dihapus di Python 3.
Anda dapat menggunakan numpy.berarti
:
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
import numpy as np
print(np.mean(l))
A statistik modul telah ditambahkan ke python 3.4. Ini memiliki fungsi untuk menghitung rata-rata yang disebut berarti. Contoh dengan daftar yang anda berikan akan sama:
from statistics import mean
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
mean(l)
Ada statistik perpustakaan jika anda menggunakan python >= 3.4
https://docs.python.org/3/library/statistics.html
Anda dapat menggunakan it's berarti metode seperti ini. Let's mengatakan anda memiliki daftar nomor yang ingin anda cari artinya:-
list = [11, 13, 12, 15, 17]
import statistics as s
s.mean(list)
Ini memiliki metode lain juga seperti stdev, varians, mode, harmonic mean, median, dll yang terlalu berguna.
sum(l) / float(len(l))
adalah jawaban yang tepat, tapi hanya untuk kelengkapan anda dapat menghitung rata-rata dengan satu mengurangi:
>>> reduce(lambda x, y: x + y / float(len(l)), l, 0)
20.111111111111114
Perhatikan bahwa hal ini dapat mengakibatkan sedikit kesalahan pembulatan:
>>> sum(l) / float(len(l))
20.111111111111111
Atau menggunakan panda
's Seri.berarti
metode:
pd.Series(sequence).mean()
Demo:
>>> import pandas as pd
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> pd.Series(l).mean()
20.11111111111111
>>>
Dari docs:
Seri.berarti(axis=Tidak ada, skipna=Ada, tingkat=Tidak ada, numeric_only=Tidak ada, **kwargs)
¶
Dan berikut merupakan dokumentasi untuk ini:
Dan seluruh dokumentasi:
from scipy import stats
l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
print(stats.describe(l))
# DescribeResult(nobs=9, minmax=(2, 78), mean=20.11111111111111,
# variance=572.3611111111111, skewness=1.7791785448425341,
# kurtosis=1.9422716419666397)
Saya punya pertanyaan serupa untuk memecahkan di Udacity´s masalah. Bukan fungsi built-in saya kode:
def list_mean(n):
summing = float(sum(n))
count = float(len(n))
if n == []:
return False
return float(summing/count)
Jauh lebih lama dari biasanya tapi untuk pemula yang cukup menantang.
Keduanya dapat memberikan anda dekat dengan nilai-nilai yang sama pada bilangan bulat atau setidaknya 10 nilai desimal. Tapi jika anda benar-benar mempertimbangkan lama mengambang nilai-nilai keduanya dapat berbeda. Pendekatan dapat bervariasi tergantung pada apa yang ingin anda capai.
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> print reduce(lambda x, y: x + y, l) / len(l)
20
>>> sum(l)/len(l)
20
Mengambang nilai-nilai
>>> print reduce(lambda x, y: x + y, l) / float(len(l))
20.1111111111
>>> print sum(l)/float(len(l))
20.1111111111
@Andrew Clark adalah benar pada pernyataan-nya.
Dalam rangka untuk menggunakan mengurangi
untuk mengambil rata-rata berjalan, anda'll perlu untuk melacak total tetapi juga jumlah elemen yang terlihat sejauh ini. sejak itu's tidak sepele elemen dalam daftar, anda'll juga harus melewati mengurangi
tambahan argumen untuk melipat ke dalam.
>>> l = [15, 18, 2, 36, 12, 78, 5, 6, 9]
>>> running_average = reduce(lambda aggr, elem: (aggr[0] + elem, aggr[1]+1), l, (0.0,0))
>>> running_average[0]
(181.0, 9)
>>> running_average[0]/running_average[1]
20.111111111111111
misalkan
x = [[-5.01,-5.43,1.08,0.86,-2.67,4.94,-2.51,-2.25,5.56,1.03], [-8.12,-3.48,-5.52,-3.78,0.63,3.29,2.09,-2.13,2.86,-3.33], [-3.68,-3.54,1.66,-4.11,7.39,2.08,-2.59,-6.94,-2.26,4.33]]
anda dapat melihat bahwa x
memiliki dimensi 3*10 jika anda perlu untuk mendapatkan berarti
untuk setiap baris yang anda dapat mengetik ini
theMean = np.mean(x1,axis=1)
don't lupa untuk mengimpor numpy sebagai np
Menggabungkan beberapa jawaban diatas, saya've datang dengan berikut yang bekerja dengan mengurangi dan doesn't mengasumsikan anda memiliki L
yang tersedia dalam mengurangi fungsi:
from operator import truediv
L = [15, 18, 2, 36, 12, 78, 5, 6, 9]
def sum_and_count(x, y):
try:
return (x[0] + y, x[1] + 1)
except TypeError:
return (x + y, 2)
truediv(*reduce(sum_and_count, L))
# prints
20.11111111111111