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 相关文章推荐
flask中使用SQLAlchemy进行辅助开发的代码
Feb 10 Python
在Python 3中实现类型检查器的简单方法
Jul 03 Python
Python的Django框架中消息通知的计数器实现教程
Jun 13 Python
解析Python中的生成器及其与迭代器的差异
Jun 20 Python
Python wxPython库Core组件BoxSizer用法示例
Sep 03 Python
python实现简单http服务器功能
Sep 17 Python
python 实现一次性在文件中写入多行的方法
Jan 28 Python
Python Multiprocessing多进程 使用tqdm显示进度条的实现
Aug 13 Python
Python列表的切片实例讲解
Aug 20 Python
判断Python中的Nonetype类型
May 25 Python
python flask开发的简单基金查询工具
Jun 02 Python
python中if和elif的区别介绍
Nov 07 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
用PHP实现多级树型菜单
2006/10/09 PHP
PHP 翻页 实例代码
2009/08/07 PHP
简单的php写入数据库类代码分享
2011/07/26 PHP
Smarty foreach控制循环次数的实现详解
2013/07/03 PHP
php获取客户端IP及URL的方法示例
2017/02/03 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
菜鸟javascript基础整理1
2010/12/06 Javascript
jQuery EasyUI API 中文文档 - Documentation 文档
2011/09/29 Javascript
js中eval详解
2012/03/30 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
Node.js中的事件驱动编程详解
2014/08/16 Javascript
JavaScript实现找出字符串中第一个不重复的字符
2014/09/03 Javascript
完美实现仿QQ空间评论回复特效
2015/05/06 Javascript
jquery实现鼠标滑过后动态图片提示效果实例
2015/08/10 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
简单实现jQuery弹窗效果
2017/10/30 jQuery
微信小程序自定义导航栏
2018/12/31 Javascript
vue-cli系列之vue-cli-service整体架构浅析
2019/01/14 Javascript
关于vue.js中实现方法内某些代码延时执行
2019/11/14 Javascript
如何构建 vue-ssr 项目的方法步骤
2020/08/04 Javascript
python实现html转ubb代码(html2ubb)
2014/07/03 Python
常见python正则用法的简单实例
2016/06/21 Python
python实现K近邻回归,采用等权重和不等权重的方法
2019/01/23 Python
Pycharm debug调试时带参数过程解析
2020/02/03 Python
python shell命令行中import多层目录下的模块操作
2020/03/09 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
小学教师节活动方案
2014/01/31 职场文书
总经理司机职责
2014/02/02 职场文书
教师自查自纠材料
2014/10/14 职场文书
2014年体育工作总结
2014/11/24 职场文书
小学新教师个人总结
2015/02/05 职场文书
体育教师个人总结
2015/02/09 职场文书
2015高考寄语集锦
2015/02/27 职场文书
幼儿园开学通知
2015/04/24 职场文书
90条交通安全宣传标语
2019/10/12 职场文书
详解Anyscript开发指南绕过typescript类型检查
2022/09/23 Javascript