numpy初認(rèn)識
numpy是數(shù)值化的python,
Python list的替代品:numpy array
可以對整個數(shù)組進(jìn)行計算
操作方便砖织,且快速
height = [1.56,1.75,1.60,1.68]
weight = [45,65,50,52]
print weight / height ** 2
上面的代碼運(yùn)行錯誤
但是有了numpy著淆,這個問題是可以解決的
# 計算身體質(zhì)量指數(shù) (Body Mass Index, 簡稱BMI)
import numpy as np
height = [1.56,1.75,1.60,1.68]
weight = [45,65,50,52]
np_heigh = np.array(height)
np_weigh = np.array(weight)
print np_weigh / np_heigh ** 2
#輸出 [ 18.49112426 21.2244898 19.53125 18.42403628]
注意
numpy數(shù)組的元素的類型是相同的菇存。
>>> np.array([1.0,"is",True])
array(['1.0', 'is', 'True'],
dtype='|S4')
分清list和numpy數(shù)組的區(qū)別,對list進(jìn)行 “ + ” 運(yùn)算是兩個list連接起來狰域,numpy數(shù)組則是對應(yīng)的元素逐個相加媳拴。
>>> python_list = [1,2,3]
>>> numpy_array = np.array([1,2,3])
>>> python_list + python_list
[1, 2, 3, 1, 2, 3]
>>> numpy_array + numpy_array
array([2, 4, 6])
>>> numpy_array + python_list
array([2, 4, 6])
numpy的構(gòu)造子集
先將上述的計算身體質(zhì)量指數(shù)的結(jié)果賦給變量bmi,其中bmi>19輸出了bool類型的list兆览,滿足這個條件的元素對于的值是True屈溉。對于bmi[bmi>19],則是選取到了值大于19的子集抬探。
>>> bmi = np_weigh / np_heigh ** 2
>>> print bmi
[ 18.49112426 21.2244898 19.53125 18.42403628]
>>> bmi > 19
array([False, True, True, False], dtype=bool)
>>> bmi[bmi>19]
array([ 21.2244898, 19.53125 ])
>>> bmi[1]
21.224489795918366
numpy數(shù)組的類型
numpy數(shù)組的類型:ndarray
>>> type(bmi)
<type 'numpy.ndarray'>
ndarray表示n維數(shù)組子巾,下面來看看二維數(shù)組,以及它的構(gòu)造子集是怎樣的小压。
其中的np_2d[:,1:3]线梗,逗號前面沒有指明第幾行,表示所有行都被選取怠益,逗號后是1:3表示選擇第2列和第3列的值仪搔。結(jié)果就是每行的第2列和第3列的值。
np_2d[:1,1:3]根據(jù)切片的特點蜻牢,冒號后面的數(shù)字不包含烤咧,結(jié)果也就是第0(即第一行)的第2列和第3列的值。
>>> np_2d = np.array([[1,2,3,4],[5,6,7,8]])
>>> np_2d
array([[1, 2, 3, 4],
[5, 6, 7, 8]])
>>> np_2d.shape
(2, 4)
>>> np_2d[0]
array([1, 2, 3, 4])
>>> np_2d[0][2]
3
>>> np_2d[:,1:3]
array([[2, 3],
[6, 7]])
>>> np_2d[1,:]
array([5, 6, 7, 8])
>>> np_2d[:1,1:3]
array([[2, 3]])
平均數(shù) mean 和中位數(shù) median
>>> np_dd = np.array([[1.56,40],[1.67,50],[1.60,45],[1.75,60],[1.68,53]])
>>> np.mean(np_dd[:,0])
1.6519999999999999
>>> np.median(np_dd[:,0])
1.6699999999999999
np.random.normal(平均數(shù)mean抢呆,標(biāo)準(zhǔn)差stdev煮嫌,size):給出均值為mean,標(biāo)準(zhǔn)差為stdev的高斯隨機(jī)數(shù)(場),當(dāng)size賦值時抱虐,例如:size=100立膛,表示返回100個高斯隨機(jī)數(shù)。
高斯分布的概率密度函數(shù) numpy.random.normal( )
numpy中 梯码,numpy.random.normal(loc=0.0, scale=1.0, size=None)
參數(shù)的意義為:
loc:float
概率分布的均值,對應(yīng)著整個分布的中心center
scale:float
概率分布的標(biāo)準(zhǔn)差好啰,對應(yīng)于分布的寬度轩娶,scale越大越矮胖,scale越小框往,越瘦高
size:int or tuple of ints
輸出的shape鳄抒,默認(rèn)為None,只輸出一個值
我們更經(jīng)常會用到np.random.randn(size)所謂標(biāo)準(zhǔn)正太分布(μ=0, σ=1),對應(yīng)于np.random.normal(loc=0, scale=1, size)
np.column_stack(a,b):函數(shù)column_stack以列將一維數(shù)組合成二維數(shù)組
>>> height = np.round(np.random.normal(1.75,0.20,5000),2)
>>> weight = np.round(np.random.normal(60.32,15,5000),2)
>>> np_city = np.column_stack((height,weight))
>>> np_city
array([[ 1.49, 70.15],
[ 2.12, 61.91],
[ 1.38, 58.53],
...,
[ 1.63, 74.36],
[ 1.44, 73.57],
[ 1.95, 52.57]])
可視化matplotlib
>>> import matplotlib.pyplot as plt
>>> year = [1950,1970,1990,2010]
>>> pop = [2.519,3.692,5.263,6.972]
>>> plt.plot(year,pop)
[<matplotlib.lines.Line2D object at 0x10a125110>]
>>> plt.show()
改成是散點圖许溅,改變一下函數(shù)即可
plt.plot(year,pop)改為
plt.scatter(year,pop)
直方圖
plt.hist(value,bins=3)
>>> value= [0.12,0.4,1.4,1.2,2.3,3.0,2.5,3.9,2.1,2.7,4.6,4.5,5.6]
>>> plt.hist(value,bins=3)
(array([ 4., 5., 4.]), array([ 0.12 , 1.94666667, 3.77333333, 5.6 ]), <a list of 3 Patch objects>)
>>> plt.show()
個性化圖標(biāo)
顏色填充函數(shù) plt.fill_between()
設(shè)置x軸標(biāo)簽 plt.xlabel()
設(shè)置y軸標(biāo)簽 plt.ylabel()
設(shè)置圖標(biāo)標(biāo)題 plt.title()
設(shè)置y軸的刻度 plt.yticks([0,2,4,6,8,10])
>>> import matplotlib.pyplot as plt
>>> year = [1950,1970,1990,2010]
>>> pop = [1.0,3.9,6.8,9.9]
>>> plt.fill_between(year,pop,0,color='green')
<matplotlib.collections.PolyCollection object at 0x1132eb190>
>>> plt.xlabel('year')
<matplotlib.text.Text object at 0x11331d0d0>
>>> plt.ylabel('population')
<matplotlib.text.Text object at 0x1151b9690>
>>> plt.title('population projections')
<matplotlib.text.Text object at 0x11519b390>
>>> plt.yticks([0,2,4,6,8,10])
([<matplotlib.axis.YTick object at 0x10e85d990>, <matplotlib.axis.YTick object at 0x112f18850>, <matplotlib.axis.YTick object at 0x113365f50>, <matplotlib.axis.YTick object at 0x11336ae90>, <matplotlib.axis.YTick object at 0x1132d5510>, <matplotlib.axis.YTick object at 0x1134e5b90>], <a list of 6 Text yticklabel objects>)
>>> plt.show()