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中的实现
May 04 Python
python xml解析实例详解
Nov 14 Python
书单|人生苦短,你还不用python!
Dec 29 Python
python3个性签名设计实现代码
Jun 19 Python
python 实现图片旋转 上下左右 180度旋转的示例
Jan 24 Python
Python文件操作中进行字符串替换的方法(保存到新文件/当前文件)
Jun 28 Python
Python实现多线程下载脚本的示例代码
Apr 03 Python
opencv python 图片读取与显示图片窗口未响应问题的解决
Apr 24 Python
PyCharm中如何直接使用Anaconda已安装的库
May 28 Python
使用sklearn对多分类的每个类别进行指标评价操作
Jun 11 Python
keras 模型参数,模型保存,中间结果输出操作
Jul 06 Python
Pytorch实现WGAN用于动漫头像生成
Mar 04 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
yii框架通过控制台命令创建定时任务示例
2014/04/30 PHP
PHP 传输会话curl函数的实例详解
2017/09/12 PHP
Yii redis集合的基本使用教程
2020/06/14 PHP
jQuery之浮动窗口实现代码(两种方法)
2010/09/08 Javascript
Colortip基于jquery的信息提示框插件在IE6下面的显示问题修正方法
2010/12/06 Javascript
javascript淡入淡出效果的实现思路
2012/03/31 Javascript
js中top/parent/frame概述及案例应用
2013/02/06 Javascript
浅谈JavaScript Math和Number对象
2015/01/26 Javascript
如何使用AngularJs打造权限管理系统【简易型】
2016/05/09 Javascript
浅谈jquery的map()和each()方法
2016/06/12 Javascript
jQuery插件zTree实现清空选中第一个节点所有子节点的方法
2017/03/08 Javascript
使用vue-router完成简单导航功能【推荐】
2018/06/28 Javascript
JS实现的RC4加密算法示例
2018/08/16 Javascript
vue中使用heatmapjs的示例代码(结合百度地图)
2018/09/05 Javascript
微信小程序tabbar底部导航
2018/11/05 Javascript
详解原生JS动态添加和删除类
2019/03/26 Javascript
vue-loader中引入模板预处理器的实现
2019/09/04 Javascript
JS造成内存泄漏的几种情况实例分析
2020/03/02 Javascript
Electron实现应用打包、自动升级过程解析
2020/07/07 Javascript
JavaScript 中判断变量是否为数字的示例代码
2020/10/22 Javascript
python使用cStringIO实现临时内存文件访问的方法
2015/03/26 Python
python中异常报错处理方法汇总
2016/11/20 Python
python numpy 显示图像阵列的实例
2018/07/02 Python
Python 使用list和tuple+条件判断详解
2019/07/30 Python
python常见字符串处理函数与用法汇总
2019/10/30 Python
html5版canvas自由拼图实例
2014/10/15 HTML / CSS
会计演讲稿范文
2014/05/23 职场文书
院党委组织查摆问题对照检查材料思想汇报2014
2014/10/08 职场文书
2014年党总支工作总结
2014/12/18 职场文书
大学学生个人总结
2015/02/15 职场文书
写给老婆的保证书
2015/02/27 职场文书
试用期解除劳动合同通知书
2015/04/16 职场文书
幼儿园中班教学反思
2016/03/03 职场文书
基于JavaScript实现省市联动效果
2021/06/22 Javascript
基于PostgreSQL/openGauss 的分布式数据库解决方案
2021/12/06 PostgreSQL
Android开发之底部导航栏的快速实现
2022/04/28 Java/Android