初体验numpy和matplotlib

numpy初认识

numpy是数值化的python,
Python list的替代品:numpy array
可以对整个数组进行计算
操作方便,且快速

height = [1.56,1.75,1.60,1.68]
weight = [45,65,50,52]
print weight / height ** 2

上面的代码运行错误

但是有了numpy,这个问题是可以解决的

# 计算身体质量指数 (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数组的元素的类型是相同的。

>>> np.array([1.0,"is",True])
array(['1.0', 'is', 'True'],
      dtype='|S4')

分清list和numpy数组的区别,对list进行 “ + ” 运算是两个list连接起来,numpy数组则是对应的元素逐个相加。

>>> 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的构造子集

先将上述的计算身体质量指数的结果赋给变量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数组的类型
numpy数组的类型:ndarray

>>> type(bmi)
<type 'numpy.ndarray'>

ndarray表示n维数组,下面来看看二维数组,以及它的构造子集是怎样的。

其中的np_2d[:,1:3],逗号前面没有指明第几行,表示所有行都被选取,逗号后是1:3表示选择第2列和第3列的值。结果就是每行的第2列和第3列的值。

np_2d[:1,1:3]根据切片的特点,冒号后面的数字不包含,结果也就是第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]])

平均数 mean 和中位数 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(平均数mean,标准差stdev,size):给出均值为mean,标准差为stdev的高斯随机数(场),当size赋值时,例如:size=100,表示返回100个高斯随机数。

高斯分布的概率密度函数 numpy.random.normal( )
numpy中 ,numpy.random.normal(loc=0.0, scale=1.0, size=None)
参数的意义为:
  loc:float
  概率分布的均值,对应着整个分布的中心center
  scale:float
  概率分布的标准差,对应于分布的宽度,scale越大越矮胖,scale越小,越瘦高
  size:int or tuple of ints
  输出的shape,默认为None,只输出一个值
  我们更经常会用到np.random.randn(size)所谓标准正太分布(μ=0, σ=1),对应于np.random.normal(loc=0, scale=1, size)

np.column_stack(a,b):函数column_stack以列将一维数组合成二维数组

>>> 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()

改成是散点图,改变一下函数即可

 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()

个性化图标

颜色填充函数 plt.fill_between()
设置x轴标签 plt.xlabel()
设置y轴标签 plt.ylabel()
设置图标标题 plt.title()
设置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()

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,047评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,807评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,501评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,839评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,951评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,117评论 1 291
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,188评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,929评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,372评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,679评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,837评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,536评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,168评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,886评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,129评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,665评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,739评论 2 351