def fangcha(): a=float(raw_input("請輸入a:")) b=float(raw_input("請輸入b:")) c=float(raw_input("請輸入C:")) d=(a+b+c)/3.0 e=((a-d)**2+(b-d)**2+(c-d)**2)/3.0 print "平均數是:%f方差是:%f" %(d,e) fangcha() Python2.7可用
“只有客戶發(fā)展了,才有我們的生存與發(fā)展!”這是創(chuàng)新互聯(lián)公司的服務宗旨!把網站當作互聯(lián)網產品,產品思維更注重全局思維、需求分析和迭代思維,在網站建設中就是為了建設一個不僅審美在線,而且實用性極高的網站。創(chuàng)新互聯(lián)對網站建設、做網站、網站制作、網站開發(fā)、網頁設計、網站優(yōu)化、網絡推廣、探索永無止境。
python作為數據分析的利器,求極差、平均數、中位數、眾數與方差是很常用的,然而,在python進行統(tǒng)計往往要使用外部的python庫numpy,這個庫不難裝,然而,如果單純只是求極差、平均數、中位數、眾數與方差,還是自己寫比較好,因為,給一個.py程序別人的機器,別人的機器上沒有python庫numpy,又要別人折騰一番,這很不好。不過看情況咯,如果你要處理上億級的數據,還是配置一下外部的python庫numpy吧。
先給大家回歸一下極差、平均數、中位數、眾數與方差是什么鬼:
1、極差:最大值與最小值之差。它是標志值變動的最大范圍。英文:range
公式:R=Xmax-Xmin(其中,Xmax為最大值,Xmin為最小值)
2、平均數:一組數據中所有數據之和再除以數據的個數。反映數據集中趨勢的一項指標。英文:average
公式:
3、中位數:對于有限的數集,可以通過把所有觀察值高低排序后找出正中間的一個作為中位數。如果觀察值有偶數個,通常取最中間的兩個數值的平均數作為中位數。英文:median
公式:從小到大排序為??則N為奇數時,N為偶數時,?
4、眾數:眾數是樣本觀測值在頻數分布表中頻數最多的那一組的組中值,主要應用于大面積普查研究之中。英文:mode
例如:1,2,3,3,4的眾數是3。
但是,如果有兩個或兩個以上個數出現次數都是最多的,那么這幾個數都是這組數據的眾數。
例如:1,2,2,3,3,4的眾數是2和3。
還有,如果所有數據出現的次數都一樣,那么這組數據沒有眾數。
例如:1,2,3,4,5沒有眾數。
5、方差:方差是實際值與期望值之差平方的平均值,方差是在概率論和統(tǒng)計方差衡量隨機變量或一組數據是離散程度的度量。英文:variance
公式:或者(就是在《概率論與數理統(tǒng)計》中那條,方差就是平方的期望-期望的平方)
因此,根據上述的理論,得到如下的代碼:
[python]?view plain?copy
#-*-coding:utf-8-*-
import?time;
import?random;
class?Math:
#求極差
@staticmethod
def?range(l):
return?max(l)-min(l);
#求平均數
@staticmethod
def?avg(l):
return?float(sum(l))/len(l);
#求中位數
@staticmethod
def?median(l):
l=sorted(l);#先排序
if?len(l)%2==1:
return?l[len(l)/2];
else:
return?(l[len(l)/2-1]+l[len(l)/2])/2.0;
#求眾數
@staticmethod
def?mode(l):
#統(tǒng)計list中各個數值出現的次數
count_dict={};
for?i?in?l:
if?count_dict.has_key(i):
count_dict[i]+=1;
else:
count_dict[i]=1;
#求出現次數的最大值
max_appear=0
for?v?in?count_dict.values():
if?vmax_appear:
max_appear=v;
if?max_appear==1:
return;
mode_list=[];
for?k,v?in?count_dict.items():
if?v==max_appear:
mode_list.append(k);
return?mode_list;
#求方差
@staticmethod
def?variance(l):#平方的期望-期望的平方
s1=0;
s2=0;
for?i?in?l:
s1+=i**2;
s2+=i;
return?float(s1)/len(l)-(float(s2)/len(l))**2;
#求方差2
@staticmethod
def?variance2(l):#平方-期望的平方的期望
ex=float(sum(l))/len(l);
s=0;
for?i?in?l:
s+=(i-ex)**2;
return?float(s)/len(l);
#主函數,測試
arr=[1,2,3,2,3,1,4];
print?"極差為:{0}".format(Math.range(arr));
print?"平均數為:{0:.2f}".format(Math.avg(arr));
print?"中位數為:{0}".format(Math.median(arr));
print?"眾數為:{0}".format(Math.mode(arr));
print?"方差為:{0:.2f}".format(Math.variance(arr));
print?"方差為:{0:.2f}".format(Math.variance2(arr));
print;
#性能測試
arraylist=[];
for?i?in?range(1,1000000):
arraylist.append(i);
random.shuffle(arraylist);
time_start=time.time();
print?"方差為:{0:.2f}".format(Math.variance(arraylist));
time_end=time.time();
print?"{0}s".format(time_end-time_start);
time_start=time.time();
print?"方差為:{0:.2f}".format(Math.variance2(arraylist));
time_end=time.time();
print?"{0}s".format(time_end-time_start);
運行結果如下:
關于這個程序有幾點說明的:
(1)開頭引入time與random主要是為了最后部分測試兩種求方差的方式那種性能較優(yōu)使用,一般情況下使用上述我自定義的Math類,無須引入任何python包。
(2)求任何一個統(tǒng)計量,用到除法,注意先將int先轉float,否則精度損失嚴重,你是得到不到最后的正確答案的。
(3)python中自帶有求list所有元素之和的sum,求list中的最值max,min,對list中的元素進行從小到大的排序sort()都用了,其余只能讓我們自己現實了。
(4)這里無須考慮如果形式參數被傳入一個字符串數組怎么辦,因為這些工具類都是我們自己使用了,自己控制好要傳遞的數值,無須考慮這么多。
(5)求眾數最艱難,因為用不到任何python自帶的方法,還要返回一個list,因為眾數的個數不定,統(tǒng)計數組中出現次數最多的數的時候,用到了python中的字典dict,《【Python】容器類》(點擊打開鏈接),這個字典中,key是list中的數字,values是該數字出現的次數。然后要求出現次數的最大值,最后再求出改最大值對應的key。其中用count_dict.items()返回字典中的key-value對的數組集,count_dict.values()返回字典中的value集,當然同時也有count_dict.keys()返回key集。
(6)由于求方差的方法有兩種,此程序在最后部分生成了一個百萬級、打亂順序的list,對兩種求方差的方法進行測試,令人吃驚的是,萬萬沒想到是我們愚蠢的人類最不愛用,也最難用的,最不好用的平方-期望的平方的期望,優(yōu)于更好記憶的、更常用的平方的期望-期望的平方:。。從上述的運行結果可以看出這種求方差的方法速度是的一倍!這就是聰明的計算機與愚蠢的人類的區(qū)別吧~
(7)最后,python的打印到控制臺,其實你完全可以print得更好的,你不換行還要在print后面補逗號嗎,再print一個什么東東,或者將數值用str先轉字符串才能與純正的字符串連接起來,而字符串的format方法,配合print相當于C語言的printf,同時python的format用{0},{1}...代表后面的第0、1……參數。{0:.2f}代表這個參數以保留2位小數的方式輸出。
閱讀全文
版權聲明:本文為博主原創(chuàng)文章,未經
你把遍歷的結果放到一個列表里面,便利結束后求列表里的最大值就行了
ls=[]
for?i?in?range(xxx):
ls.append(func)
max_value?=?max(ls)
python的求
標準差
的函數是std,是numpy庫的成員,
如果非要
用sd函數求標準差,也不是不行(from
numpy
import
std
as
sd)。其參數是所需求標準差的矩陣或列表,
返回值
即標準差。示范如下:
import
numpy
as
np;
from
numpy
import
std
as
sd;
print([1,
2,3],"的標準差是);
print(sd([1,2,3]));
python有個符號計算的庫叫sympy,可以直接用這個庫求導數然后解導數=0的方程,參考代碼如下:
from sympy import *
x = symbols('x')
y = (x-3)**2+2*sin(x)-3*x+1
eq = diff(y, x)
solve(eq, x)
網頁題目:Python求極差的函數 計算極差的函數
URL網址:http://www.rwnh.cn/article18/dodocdp.html
成都網站建設公司_創(chuàng)新互聯(lián),為您提供做網站、移動網站建設、自適應網站、App設計、網站制作、外貿建站
聲明:本網站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)