中文字幕理论片,69视频免费在线观看,亚洲成人app,国产1级毛片,刘涛最大尺度戏视频,欧美亚洲美女视频,2021韩国美女仙女屋vip视频

打開APP
userphoto
未登錄

開通VIP,暢享免費電子書等14項超值服

開通VIP
統(tǒng)計師的Python日記【第3天:Numpy你好】


本文是【統(tǒng)計師的Python日記】第3天的日記


回顧一下,第1天學(xué)習(xí)了Python的基本頁面、操作,以及幾種主要的容器類型;第2天學(xué)習(xí)了python的函數(shù)、循環(huán)和條件、類。


復(fù)習(xí)大綱:


一、為什么學(xué)Python?

二、安裝與熟悉

三、容器

四、函數(shù)

五、循環(huán)與條件

六、類

日記小結(jié)


原文復(fù)習(xí)(點擊查看):


【第1天:誰來給我講講Python?】


【第2天:再接著介紹一下Python唄】


今天將帶來第三天的學(xué)習(xí)日記。


細(tiāo)心(cì)的朋友會發(fā)現(xiàn),第二天的日記寫成日期是14年9月,也就是說“第2天”到“第3天”,隔了整整一年半,這么長時間干嘛去了?


文末底部”贊賞“那里有答案  (*???)


引力波是最近的一個大新聞,在引力波的數(shù)據(jù)分析中,Python也立下了大功。有人在Github上發(fā)現(xiàn)了一個專門用于分析引力波數(shù)據(jù)的Python包(這個數(shù)說君以后會說一說),而且據(jù)說論文里的圖也是用matplotlib畫的。


在數(shù)據(jù)科學(xué)的大時代里,統(tǒng)計師還有什么理由不趕緊裝備起Python來?(新技能get√)




統(tǒng)計師的Python日記【第3天:Numpy你好】


前兩天了解了Python的一些基本內(nèi)容,今天將進階學(xué)習(xí)一下Numpy這個庫。做為一名統(tǒng)計師,既然使用Python的主要目的就是處理數(shù)據(jù)、統(tǒng)計分析,那么Numpy這個工具就一定要有了解。


Numpy,你好:


  • NumPy系統(tǒng)是Python的一種開源的數(shù)值計算擴展。用來存儲和處理大型矩陣,比Python自身的嵌套列表(nested list structure)結(jié)構(gòu)要高效的多。據(jù)說NumPy將Python相當于變成一種免費的更強大的Matlab


  • NumPy(Numeric Python)提供了許多高級的數(shù)值編程工具,如:矩陣數(shù)據(jù)類型、矢量處理,以及精密的運算庫。專為進行嚴格的數(shù)字處理而產(chǎn)生。多為很多大型金融公司使用,NASA用其處理一些本來使用C++,F(xiàn)ortran或Matlab等所做的任務(wù)。


  • Numpy本身并沒有提供多么高級的數(shù)據(jù)分析功能,理解Numpy數(shù)組以及面向數(shù)組的計算將有助于你更加高效地使用諸如Pandas之類的工具。


我自己的進階計劃是:


Numpy → Pandas → 掌握一些數(shù)據(jù)清洗、規(guī)整、合并等功能 → 掌握類似與SQL的聚合等數(shù)據(jù)管理功能 → 能夠用Python進行統(tǒng)計建模、假設(shè)檢驗等分析技能 → 能用Python打印出100元錢 → 能用Python幫我洗衣服、做飯 → 能用Python給我生小猴子......


定下了這個目標,就從Numpy開始把!


第三天我的學(xué)習(xí)大綱:


一、數(shù)據(jù)格式

二、數(shù)組運算

  1. 加、減、乘、除、內(nèi)積、轉(zhuǎn)置

  2. 索引和分片

  3. 數(shù)組拆分

三、通用函數(shù)

  1. 數(shù)學(xué)運算

  2. 統(tǒng)計方法

  3. 一些邏輯方法

  4. 隨機數(shù)生成

  5. 存儲與導(dǎo)入


經(jīng)過這些學(xué)習(xí)大綱,對Numpy有一個比較扎實的了解。



一、數(shù)據(jù)格式


Numpy提供了一種多維的數(shù)組對象ndarray,先認識一下:


>>> data1=[1,2,3]

>>> data1

[1, 2, 3]


>>> a=np.array(data1)

>>> a

array([1, 2, 3])



>>> data2=[[1,2,3],[4,5,6]]

>>> data2

[[1, 2, 3], [4, 5, 6]]


>>> b=np.array(data2)

>>> b

array([[1, 2, 3],

       [4, 5, 6]])


a是一維數(shù)組,b是多維數(shù)組。我們再認識一下它的數(shù)據(jù)類型:


>>> a.dtype

dtype('int32')

>>> b.dtype

dtype('int32')


如果是字符串呢?看一下:


>>> c=np.array(['shu','shuo','jun'])

>>> c.dtype

dtype('S4')


Numpy提供這樣的數(shù)組非常的方便靈活,有多方便靈活呢?看下面的日記內(nèi)容。



二、數(shù)組運算


1. 加、減、乘、除、內(nèi)積、轉(zhuǎn)置


運算起來就發(fā)現(xiàn)ndarray的靈活方便了,比如一個數(shù)組a:


>>> a=[[1,2,3],[4,5,6]]


>>> a+a

[[1, 2, 3], [4, 5, 6], [1, 2, 3], [4, 5, 6]]


>>> a*a


Traceback (most recent call last):

  File '', line 1, in

    a*a

TypeError: can't multiply sequence by non-int of type 'list'


a+a其實是兩個列表合并,而兩個列表是不可以相乘的,至于減和除則都不可以了。


但是,ndarray可以:


>>> npa = np.array(a)


>>> npa+npa

array([[ 2,  4,  6],

       [ 8, 10, 12]])


>>> npa-npa

array([[0, 0, 0],

       [0, 0, 0]])


>>> npa*npa

array([[ 1,  4,  9],

       [16, 25, 36]])


>>> npa/npa

array([[1, 1, 1],

       [1, 1, 1]])


可以直接實現(xiàn)矩陣元素的加減乘除,注意,這個運算是元素級別的運算!


那么兩個矩陣的相乘要怎么算呢?其實就是內(nèi)積啦:


>>> b=np.dot(npa,npa.T)

>>> b

array([[14, 32],

       [32, 77]])


用np.dot(X,Y)就可以計算兩個矩陣X和Y的內(nèi)積,順便再介紹一下,.T就是求轉(zhuǎn)置,npa.T就是矩陣npa的轉(zhuǎn)置。



2. 索引和分片


在【統(tǒng)計師的Python日記】第一天的日記中,就已經(jīng)學(xué)習(xí)了數(shù)組的分片,


>>> c='hello'

>>> c[0:3]

'hel'

>>> c[0:4:2]

'hl'



在Numpy的數(shù)組中也有這樣的操作:


>>> c=np.array([1,2,3,4,5,6])

>>> c[2:4]

array([3, 4])


但是,這樣隱藏了一個numpy數(shù)組的巨大不同,注意看下面的結(jié)果!


>>> c=np.array([1,2,3,4,5,6])


>>> cs=c[2:4]

>>> cs

array([3, 4])


>>> cs[1]=999

>>> cs

array([  3, 999])


>>> c

array([  1,   2,   3, 999,   5,   6])


注意看,我對cs進行操作,將array([3, 4])的4變成了999,結(jié)果c中的4也變成了999!


因為,在numpy中,cs是c的一個視圖,而不是副本!這是因為numpy處理的是大數(shù)據(jù),它會盡可能的避免數(shù)據(jù)復(fù)制來復(fù)制去,以保證性能的節(jié)省。


是不是很高冷?!


所以在numpy操作中要很小心,如果非要生成一個副本,則可以用.copy()操作:


cs=c[2:4].copy()


此時的cs就和c一點沒關(guān)系了,可以放心的操作。



3. 數(shù)組拆分


用.reshape((a,b))可以將數(shù)組拆分成a×b的數(shù)組:


>>> x=np.array([1,2,3,4,5,6,7,8,9,10,11,12])

>>> x.reshape((3,4))

array([[ 1,  2,  3,  4],

       [ 5,  6,  7,  8],

       [ 9, 10, 11, 12]])



三、通用函數(shù)


學(xué)習(xí)完Numpy數(shù)組的基本格式、基本的運算,再學(xué)習(xí)一下高級一些的通用函數(shù),書上這么寫道:


“通用函數(shù)(ufunc)是一種對ndarray中的數(shù)據(jù)執(zhí)行元素級運算的函數(shù)”



1. 數(shù)學(xué)運算


主要是進行一些數(shù)學(xué)的運算,如求開方、求e的n次冪、平方等等。


  • sqrt() 求開方


>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> a

array([[1, 2, 3],

       [4, 5, 6],

       [7, 8, 9]])


>>> np.sqrt(a)

array([[ 1.        ,  1.41421356,  1.73205081],

       [ 2.        ,  2.23606798,  2.44948974],

       [ 2.64575131,  2.82842712,  3.        ]])


  • exp()求e次冪


>>> a = np.array([[1,2,3],[4,5,6],[7,8,9]])

>>> a

array([[1, 2, 3],

       [4, 5, 6],

       [7, 8, 9]])


>>> np.exp(a)

array([[  2.71828183e+00,   7.38905610e+00,   2.00855369e+01],

       [  5.45981500e+01,   1.48413159e+02,   4.03428793e+02],

       [  1.09663316e+03,   2.98095799e+03,   8.10308393e+03]])


其他方法如下表:


函數(shù)

說明

abs

絕對值

square

平方根

log、log10、log2…

自然對數(shù)、底數(shù)為10log、底數(shù)為2log…

sign

計算各元素的正負號

ceil

計算大于等于各元素的最大整數(shù)

floor

計算小于等于各元素的最大整數(shù)

rint

四舍五入到最接近的整數(shù)

modf

將數(shù)組的小數(shù)和整數(shù)部分以兩個獨立數(shù)組的形式返回

isnan

查看各元素是否是NaN

cos、coshsin、sinhtan、tanh

三角函數(shù)



add(a,b)

a+b

subtract(a,b)

a/b

multiply(a,b)

a*b

……



等等,有需要再具體查百度。



2. 統(tǒng)計方法


作為一名統(tǒng)計師,這個是我最喜歡的,Numpy提供了哪些常用的統(tǒng)計方法呢?


  • sort()排序


sort(a,0)是對豎軸上的元素進行排序;sort(a,1)是對橫軸上的元素進行排序.


>>> a=np.array([[10,2,3],[4,15,6],[9,8,7]])

>>> a

array([[10,  2,  3],

       [ 4, 15,  6],

       [ 9,  8,  7]])


>>> np.sort(a,0)

array([[ 4,  2,  3],

       [ 9,  8,  6],

       [10, 15,  7]])


>>> np.sort(a,1)

array([[ 2,  3, 10],

       [ 4,  6, 15],

       [ 7,  8,  9]])


注意,Numpy的這個sort方法,返回的是數(shù)組a的副本,a數(shù)組本身不變!


  • sum()、mean()、std()


可以利用這些函數(shù)對數(shù)組求和、均值以及標準差:


>>> a

array([[10,  2,  3],

       [ 4, 15,  6],

       [ 9,  8,  7]])


>>> np.mean(a)

7.1111111111111107


>>> np.sum(a)

64


>>> np.std(a)

3.7843080813169783


也可以對行或者列進行統(tǒng)計計算,同樣指定0和1即可:


>>> np.mean(a,1)

array([ 5.        ,  8.33333333,  8.        ])


其他方法還有min、max、argmin、argmax等,需要時百度即可。



3. 一些邏輯方法


  • any()和all()


適用于布爾型數(shù)據(jù),all()需要當元素全為True時,才返回True;any()需要任意元素為True,就返回True:


>>> a=np.array([True, True, False])


>>> a.any()

True


>>> a.all()

False


  • in1d(a,b)查找成員資格


用來測試一個數(shù)組a在另一個數(shù)組b中的成員資格,返回布爾值


>>> a

array([ 1, -1,  2])


>>> b

array([ 4, 23, -9,  1,  3,  2])


>>> np.in1d(a,b)

array([ True, False,  True], dtype=bool)


  • unique()


查找數(shù)組中的唯一值,返回已排序的結(jié)果


>>> a=np.array([1,3,3,4,5,6,7,5,5,6])


>>> np.unique(a)

array([1, 3, 4, 5, 6, 7])



4. 隨機數(shù)生成


  • random.randn(m,n)


生成一個m×n的標準正態(tài)分布


>>> a=np.random.randn(3,4)

>>> a

array([[ 0.32363846,  1.22595324, -1.04776719, -1.14483233],

       [ 3.07756974, -0.09599722,  0.4276572 ,  0.76864267],

       [ 0.18575346, -1.06510241, -0.91460616, -1.25091496]])



  • random.normal(mean, std, size=(m,n))


生成一個m×n矩陣,服從均值mean,標準差std的正態(tài)分布


>>> a=np.random.normal(2,1,size=(3,4))

>>> a

array([[ 0.13642552,  1.0807106 ,  1.71524621,  2.2809086 ],

       [ 1.6757182 ,  1.47675827,  2.93552336,  1.16315545],

       [ 2.36641683,  2.10758811,  3.40073296,  1.51738042]])


其他


Numpy.random.函數(shù)

說明

seed

確定隨機數(shù)生成器的種子

permutation

返回一個序列隨機排列

rand

產(chǎn)生均勻分布的樣本

randint

從給定的上下限范圍內(nèi)隨機選取整數(shù)

binomial

產(chǎn)生二項分布的樣本

beta

產(chǎn)生beta分布的樣本

chisquare

產(chǎn)生卡方分布的樣本

gamma

產(chǎn)生伽馬的樣本

uniform

產(chǎn)生(0,1)均勻分布的樣本


等等,需要的時候再百度之。



5. 存儲與導(dǎo)入


  • 數(shù)組的儲存與讀取


不是儲存一個數(shù)據(jù),而是只儲存一個numpy的數(shù)組!save這個函數(shù)可以做到。


save(‘d:/save_a’, a)

將數(shù)組a儲存在d盤下,命名為save_a,會自動加上擴展名.npy


load(‘d:/save_a’)

讀取相應(yīng)的路徑即可。

 

savez()

將多個數(shù)組保存到一個壓縮文件中,比如將arr1和arr2兩個數(shù)組都存起來,存在zip_array里。


  • 數(shù)據(jù)的導(dǎo)入導(dǎo)出


使用loadtxt將數(shù)據(jù)導(dǎo)入,格式為:


np.loadtxt(‘路徑’, delimiter=’分隔符’)


比如導(dǎo)入d盤下面的這個testSet.txt文件:




>>> a=np.loadtxt('D:/testSet.txt')

>>> a

array([[ -1.76120000e-02,   1.40530640e+01,   0.00000000e+00],

       [ -1.39563400e+00,   4.66254100e+00,   1.00000000e+00],

       [ -7.52157000e-01,   6.53862000e+00,   0.00000000e+00],

       [ -1.32237100e+00,   7.15285300e+00,   0.00000000e+00],

       [  4.23363000e-01,   1.10546770e+01,   0.00000000e+00],

       [  4.06704000e-01,   7.06733500e+00,   1.00000000e+00],

       [  6.67394000e-01,   1.27414520e+01,   0.00000000e+00],

......

       [  1.38861000e+00,   9.34199700e+00,   0.00000000e+00],

       [  3.17029000e-01,   1.47390250e+01,   0.00000000e+00]])



注意反斜杠/的方向!


假如原數(shù)據(jù)是逗號分隔的,只要加上delimiter就好了:


np.loadtxt('D:/testSet.txt', delimiter=',')


這是導(dǎo)入,那么將數(shù)據(jù)導(dǎo)出呢?用savetxt()即可,將數(shù)據(jù)導(dǎo)出到以某種分隔符隔開的文本文件中。


本站僅提供存儲服務(wù),所有內(nèi)容均由用戶發(fā)布,如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊舉報。
打開APP,閱讀全文并永久保存 查看更多類似文章
猜你喜歡
類似文章
NumPy基礎(chǔ)教程(四)數(shù)組應(yīng)用
Numpy中數(shù)組和矩陣操作的數(shù)學(xué)函數(shù)
Python中的Numpy入門教程
python怎么創(chuàng)建數(shù)組
Python之Numpy庫常用函數(shù)大全(含注釋)
Python數(shù)據(jù)分析之numpy學(xué)習(xí)(一)
更多類似文章 >>
生活服務(wù)
熱點新聞
分享 收藏 導(dǎo)長圖 關(guān)注 下載文章
綁定賬號成功
后續(xù)可登錄賬號暢享VIP特權(quán)!
如果VIP功能使用有故障,
可點擊這里聯(lián)系客服!

聯(lián)系客服