Python中的Numpy入门教程


Posted in Python onApril 26, 2014

1、Numpy是什么

很简单,Numpy是Python的一个科学计算的库,提供了矩阵运算的功能,其一般与Scipy、matplotlib一起使用。其实,list已经提供了类似于矩阵的表示形式,不过numpy为我们提供了更多的函数。如果接触过matlab、scilab,那么numpy很好入手。 在以下的代码示例中,总是先导入了numpy:

>>> import numpy as np
>>> print np.version.version
1.6.2

2、多维数组

多维数组的类型是:numpy.ndarray。

使用numpy.array方法

以list或tuple变量为参数产生一维数组:

>>> print np.array([1,2,3,4])
[1 2 3 4]
>>> print np.array((1.2,2,3,4))
[ 1.2  2.   3.   4. ]
>>> print type(np.array((1.2,2,3,4)))
<type 'numpy.ndarray'>

以list或tuple变量为元素产生二维数组:
>>> print np.array([[1,2],[3,4]])
[[1 2]
 [3 4]]

生成数组的时候,可以指定数据类型,例如numpy.int32, numpy.int16, and numpy.float64等:
>>> print np.array((1.2,2,3,4), dtype=np.int32)
[1 2 3 4]

使用numpy.arange方法
>>> print np.arange(15)
[ 0  1  2  3  4  5  6  7  8  9 10 11 12 13 14]
>>> print type(np.arange(15))
<type 'numpy.ndarray'>
>>> print np.arange(15).reshape(3,5)
[[ 0  1  2  3  4]
 [ 5  6  7  8  9]
 [10 11 12 13 14]]
>>> print type(np.arange(15).reshape(3,5))
<type 'numpy.ndarray'>

使用numpy.linspace方法

例如,在从1到3中产生9个数:

>>> print np.linspace(1,3,9)
[ 1.    1.25  1.5   1.75  2.    2.25  2.5   2.75  3.  ]

使用numpy.zeros,numpy.ones,numpy.eye等方法可以构造特定的矩阵

例如:

>>> print np.zeros((3,4))
[[ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]
 [ 0.  0.  0.  0.]]
>>> print np.ones((3,4))
[[ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]
 [ 1.  1.  1.  1.]]
>>> print np.eye(3)
[[ 1.  0.  0.]
 [ 0.  1.  0.]
 [ 0.  0.  1.]]

创建一个三维数组:
>>> print np.zeros((2,2,2))
[[[ 0.  0.]
  [ 0.  0.]]
 [[ 0.  0.]
  [ 0.  0.]]]

获取数组的属性:
>>> a = np.zeros((2,2,2))
>>> print a.ndim   #数组的维数
3
>>> print a.shape  #数组每一维的大小
(2, 2, 2)
>>> print a.size   #数组的元素数
8
>>> print a.dtype  #元素类型
float64
>>> print a.itemsize  #每个元素所占的字节数
8

数组索引,切片,赋值

示例:

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

使用for操作元素
>>> for x in np.linspace(1,3,3):
...     print x
...
1.0
2.0
3.0

基本的数组运算

先构造数组a、b:

>>> a = np.ones((2,2))
>>> b = np.eye(2)
>>> print a
[[ 1.  1.]
 [ 1.  1.]]
>>> print b
[[ 1.  0.]
 [ 0.  1.]]

数组的加减乘除:
>>> print a > 2
[[False False]
 [False False]]
>>> print a+b
[[ 2.  1.]
 [ 1.  2.]]
>>> print a-b
[[ 0.  1.]
 [ 1.  0.]]
>>> print b*2
[[ 2.  0.]
 [ 0.  2.]]
>>> print (a*2)*(b*2)
[[ 4.  0.]
 [ 0.  4.]]
>>> print b/(a*2)
[[ 0.5  0. ]
 [ 0.   0.5]]
>>> print (a*2)**4
[[ 16.  16.]
 [ 16.  16.]]

 使用数组对象自带的方法:

>>> a.sum()
4.0
>>> a.sum(axis=0)   #计算每一列(二维数组中类似于矩阵的列)的和
array([ 2.,  2.])
>>> a.min()
1.0
>>> a.max()
1.0

使用numpy下的方法:

>>> np.sin(a)
array([[ 0.84147098,  0.84147098],
       [ 0.84147098,  0.84147098]])
>>> np.max(a)
1.0
>>> np.floor(a)
array([[ 1.,  1.],
       [ 1.,  1.]])
>>> np.exp(a)
array([[ 2.71828183,  2.71828183],
       [ 2.71828183,  2.71828183]])
>>> np.dot(a,a)   ##矩阵乘法
array([[ 2.,  2.],
       [ 2.,  2.]])

合并数组

使用numpy下的vstack和hstack函数:

>>> a = np.ones((2,2))
>>> b = np.eye(2)
>>> print np.vstack((a,b))
[[ 1.  1.]
 [ 1.  1.]
 [ 1.  0.]
 [ 0.  1.]]
>>> print np.hstack((a,b))
[[ 1.  1.  1.  0.]
 [ 1.  1.  0.  1.]]

看一下这两个函数有没有涉及到浅拷贝这种问题:

>>> c = np.hstack((a,b))
>>> print c
[[ 1.  1.  1.  0.]
 [ 1.  1.  0.  1.]]
>>> a[1,1] = 5
>>> b[1,1] = 5
>>> print c
[[ 1.  1.  1.  0.]
 [ 1.  1.  0.  1.]]

可以看到,a、b中元素的改变并未影响c。

深拷贝数组

数组对象自带了浅拷贝和深拷贝的方法,但是一般用深拷贝多一些:

>>> a = np.ones((2,2))
>>> b = a
>>> b is a
True
>>> c = a.copy()  #深拷贝
>>> c is a
False

基本的矩阵运算

转置:

>>> a = np.array([[1,0],[2,3]])
>>> print a
[[1 0]
 [2 3]]
>>> print a.transpose()
[[1 2]
 [0 3]]

迹:
>>> print np.trace(a)
4

numpy.linalg模块中有很多关于矩阵运算的方法:
>>> import numpy.linalg as nplg

特征值、特征向量:

>>> print nplg.eig(a)
(array([ 3.,  1.]), array([[ 0.        ,  0.70710678],
       [ 1.        , -0.70710678]]))

3、矩阵

numpy也可以构造矩阵对象,这里不做讨论。

Python 相关文章推荐
Python中使用urllib2防止302跳转的代码例子
Jul 07 Python
Python找出list中最常出现元素的方法
Jun 14 Python
Python2.7 实现引入自己写的类方法
Apr 29 Python
记一次python 内存泄漏问题及解决过程
Nov 29 Python
python交互界面的退出方法
Feb 16 Python
python高斯分布概率密度函数的使用详解
Jul 10 Python
解决Tensorboard可视化错误:不显示数据 No scalar data was found
Feb 15 Python
python实现扑克牌交互式界面发牌程序
Apr 22 Python
在tensorflow实现直接读取网络的参数(weight and bias)的值
Jun 24 Python
Python切片列表字符串如何实现切换
Aug 06 Python
基于Python爬取51cto博客页面信息过程解析
Aug 25 Python
Python为何不支持switch语句原理详解
Oct 21 Python
Python中的map、reduce和filter浅析
Apr 26 #Python
Python实现的Kmeans++算法实例
Apr 26 #Python
爬山算法简介和Python实现实例
Apr 26 #Python
Python操作sqlite3快速、安全插入数据(防注入)的实例
Apr 26 #Python
python实现的二叉树算法和kmp算法实例
Apr 25 #Python
python中的__init__ 、__new__、__call__小结
Apr 25 #Python
Python yield 小结和实例
Apr 25 #Python
You might like
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
jQuery获取json后使用zy_tmpl生成下拉菜单
2015/03/27 PHP
php简单计算页面加载时间的方法
2015/06/19 PHP
PHP防盗链的基本思想 防盗链的设置方法
2015/09/25 PHP
不常用但很实用的PHP预定义变量分析
2019/06/25 PHP
php 策略模式原理与应用深入理解
2019/09/25 PHP
phpinfo的知识点总结
2019/10/10 PHP
详解new function(){}和function(){}() 区别分析
2008/03/22 Javascript
JavaScript 基础篇之对象、数组使用介绍(三)
2012/04/07 Javascript
js判断设备是否为PC并调整图片大小
2014/02/12 Javascript
JS实现鼠标箭头变成一个燃烧烛光效果的方法
2015/02/28 Javascript
深入理解JavaScript系列(44):设计模式之桥接模式详解
2015/03/04 Javascript
详解vue渲染函数render的使用
2017/12/12 Javascript
使用vue + less 实现简单换肤功能的示例
2018/02/21 Javascript
vue.js与element-ui实现菜单树形结构的解决方法
2018/04/21 Javascript
vue-router的HTML5 History 模式设置
2018/09/08 Javascript
js实现点击展开隐藏效果(实例代码)
2018/09/28 Javascript
JavaScript实现学生在线做题计时器功能
2018/12/05 Javascript
python实现根据主机名字获得所有ip地址的方法
2015/06/28 Python
python嵌套字典比较值与取值的实现示例
2017/11/03 Python
Flask 让jsonify返回的json串支持中文显示的方法
2018/03/26 Python
简单实现python聊天程序
2018/04/01 Python
浅析Python 读取图像文件的性能对比
2019/03/07 Python
python openCV获取人脸部分并存储功能
2019/08/28 Python
python中执行smtplib失败的处理方法
2020/07/01 Python
英国足球店:UK Soccer Shop
2017/11/19 全球购物
慕尼黑山地运动、户外服装和体育用品专家:Sporthaus Schuster
2019/08/27 全球购物
测绘工程本科生求职信
2013/10/10 职场文书
秘书行业自我鉴定范文
2013/12/30 职场文书
出差报告怎么写
2014/11/06 职场文书
2014幼儿园卫生保健工作总结
2014/12/05 职场文书
活动新闻稿范文
2015/07/17 职场文书
安全生产协议书
2016/03/22 职场文书
如何写好活动总结
2019/06/21 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
oracle delete误删除表数据后如何恢复
2022/06/28 Oracle