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实现处理管道的方法
Jun 04 Python
Python探索之静态方法和类方法的区别详解
Oct 27 Python
答题辅助python代码实现
Jan 16 Python
对Python 网络设备巡检脚本的实例讲解
Apr 22 Python
python简易实现任意位数的水仙花实例
Nov 13 Python
Flask配置Cors跨域的实现
Jul 12 Python
python基于Selenium的web自动化框架
Jul 14 Python
简单了解django文件下载方式
Feb 10 Python
Python3 shutil(高级文件操作模块)实例用法总结
Feb 19 Python
python GUI库图形界面开发之PyQt5打开保存对话框QFileDialog详细使用方法与实例
Feb 27 Python
Python标准库json模块和pickle模块使用详解
Mar 10 Python
python实现经纬度采样的示例代码
Dec 10 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 set_magic_quotes_runtime() 函数过时解决方法
2010/07/08 PHP
PHP版本如何选择?应该使用哪个版本?
2015/05/13 PHP
Laravel中获取路由参数Route Parameters的五种方法示例
2017/09/29 PHP
JavaScript语句可以不以;结尾的烦恼
2007/03/08 Javascript
Javascript 中介者模式实例
2009/12/16 Javascript
jQuery插件的写法分享
2013/06/12 Javascript
jQuery中bind与live的用法及区别小结
2014/01/27 Javascript
javascript的日期对象、数组对象、二维数组使用说明
2014/12/22 Javascript
JS实现很酷的EMAIL地址添加功能实例
2015/02/28 Javascript
JS提交form表单实例分析
2015/12/10 Javascript
canvas滤镜效果实现代码
2017/02/06 Javascript
jQuery插件zTree实现获取一级节点数据的方法
2017/03/08 Javascript
layui给下拉框、按钮状态、时间赋初始值的方法
2019/09/10 Javascript
JS实现关闭小广告特效
2021/01/29 Javascript
JS实现简单日历特效
2020/01/03 Javascript
微信小程序图片右边加两行文字的代码
2020/04/23 Javascript
js数组中去除重复值的几种方法
2020/08/03 Javascript
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
浅谈Python中的闭包
2015/07/08 Python
用Python实现大文本文件切割的方法
2019/01/12 Python
python买卖股票的最佳时机(基于贪心/蛮力算法)
2019/07/05 Python
Python异常处理例题整理
2019/07/07 Python
在Python中使用MongoEngine操作数据库教程实例
2019/12/03 Python
Python读取VOC中的xml目标框实例
2020/03/10 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
如何以Winsows Service方式运行JupyterLab
2020/08/30 Python
Html5百叶窗效果的示例代码
2017/12/11 HTML / CSS
阿迪达斯奥地利官方商城:adidas.at
2016/10/16 全球购物
Android interview questions
2016/12/25 面试题
什么是反射?如何实现反射?
2016/07/25 面试题
请解释接口的显式实现有什么意义
2012/05/26 面试题
《坐井观天》教学反思
2016/02/18 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
关于antd tree 和父子组件之间的传值问题(react 总结)
2021/06/02 Javascript
python中的sys模块和os模块
2022/03/20 Python
python manim实现排序算法动画示例
2022/08/14 Python