python中numpy包使用教程之数组和相关操作详解


Posted in Python onJuly 30, 2017

前言

大家应该都有所了解,下面就简单介绍下Numpy,NumPy(Numerical Python)是一个用于科学计算第三方的Python包。

NumPy提供了许多高级的数值编程工具,如:矩阵数据类型、矢量处理,以及精密的运算库。专为进行严格的数字处理而产生。下面本文将详细介绍关于python中numpy包使用教程之数组和相关操作的相关内容,下面话不多说,来一起看看详细的介绍:

一、数组简介

Numpy中,最重要的数据结构是:多维数组类型(numpy.ndarray

ndarray由两部分组成:

  • 实际所持有的数据;
  • 描述这些数据的元数据(metadata)

数组(即矩阵)的维度被称为axes,维数称为rank

ndarray 的重要属性包括: 

  • ndarray.ndim:数组的维数,也称为rank
  • ndarray.shape:数组各维的大小,对一个n行m列的矩阵来说, shape 为 (n,m)
  • ndarray.size:元素的总数。
  • ndarray.dtype:每个元素的类型,可以是numpy.int32, numpy.int16, and numpy.float64等
  • ndarray.itemsize:每个元素占用的字节数。
  • ndarray.data:指向数据内存。

二、数组的使用

使用numpy前要先导入模块,使用下面的语句导入模块:

improt numpy as np #其中np为numpy的别名,是一种习惯用法

1.使用array方法生成数组

array,也就是数组,是numpy中最基础的数据结构,最关键的属性是维度和元素类型,在numpy中,可以非常方便地创建各种不同类型的多维数组,并且执行一些基本基本操作,生成数组的方法有一下几种:
以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. ]

以list或tuple变量为元素产生二维数组或者多维数组:

>>> x = np.array(((1,2,3),(4,5,6))) 
>>> x 
array([[1, 2, 3], 
 [4, 5, 6]]) 
>>> y = np.array([[1,2,3],[4,5,6]]) 
>>> y 
array([[1, 2, 3], 
 [4, 5, 6]])

2.使用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'>

3.使用内置函数生成特殊矩阵(数组)

零矩阵

>>> 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.]]

4.索引与切片

>>> x = np.array(((1,2,3),(4,5,6))) 
>>> x[1,2] #获取第二行第三列的数 
6
>>> y=x[:,1] #获取第二列 
>>> y 
array([2, 5])

与python语法一致,不再举例。

5.获取数组属性

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

6.数组变换

多维转换为一维:

>>> x 
array([[1, 2, 3], 
  [4, 5, 6]]) 
>>> x.flatten() 
array([1, 2, 3, 4, 5, 6])

一维转换为多维:

>>> print np.arange(15).reshape(3,5) #改变形状,将一维的改成三行五列 
[[ 0 1 2 3 4] 
 [ 5 6 7 8 9] 
 [10 11 12 13 14]]

转置:

>>> x 
array([[1, 2, 3], 
  [4, 5, 6]]) 
>>> x.transpose() 
array([[1, 4], 
  [2, 5], 
  [3, 6]])

7.数组组合

水平组合:

>>> y=x 
>>> numpy.hstack((x,y)) 
array([[1, 2, 3, 1, 2, 3], 
  [4, 5, 6, 4, 5, 6]]

垂直组合

>>> numpy.vstack((x,y)) 
array([[1, 2, 3], 
  [4, 5, 6], 
  [1, 2, 3], 
  [4, 5, 6]])

用concatenate函数可以同时实现这两种方式,通过指定axis参数,默认为0,垂直组合。

>>> numpy.concatenate((x,y)) 
array([[1, 2, 3], 
  [4, 5, 6], 
  [1, 2, 3], 
  [4, 5, 6]]) 
>>> numpy.concatenate((x,y),axis=1) 
array([[1, 2, 3, 1, 2, 3], 
  [4, 5, 6, 4, 5, 6]])

8.数组分割

垂直分割

>>> z 
array([[1, 2, 3], 
  [4, 5, 6], 
  [1, 2, 3], 
  [4, 5, 6]]) 
>>> numpy.vsplit(z,2) #注意这里设置的分割数目必须可以被行数整除 
[array([[1, 2, 3], 
  [4, 5, 6]]), array([[1, 2, 3], 
  [4, 5, 6]])]

水平分割

>>> numpy.hsplit(z,3) 
[array([[1], 
  [4], 
  [1], 
  [4]]), array([[2], 
  [5], 
  [2], 
  [5]]), array([[3], 
  [6], 
  [3], 
  [6]])]

用split函数可以同时实现这两个效果,通过设置其axis参数区别,与组合类似,这里不在演示。

三、矩阵

通过上面对数组的操作可以知道,numpy中可以通过数组模拟矩阵,但是numpy也有专门处理矩阵的数据结构——matrix。

1.生成矩阵

>>> numpy.mat('1 2 3;4 5 6;7 8 9') 
matrix([[1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9]])

2.数组矩阵转化

矩阵转数组

>>> m=numpy.mat('1 2 3;4 5 6;7 8 9') 
>>> numpy.array(m) 
array([[1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9]])

数组转矩阵

>>> n=numpy.array(m) 
>>> numpy.mat(n) 
matrix([[1, 2, 3], 
  [4, 5, 6], 
  [7, 8, 9]])

3.矩阵方法

求逆:

>>> m.I 
matrix([[ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15], 
  [ 9.00719925e+15, -1.80143985e+16, 9.00719925e+15], 
  [ -4.50359963e+15, 9.00719925e+15, -4.50359963e+15]])

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持

Python 相关文章推荐
python开发中range()函数用法实例分析
Nov 12 Python
Python 'takes exactly 1 argument (2 given)' Python error
Dec 13 Python
python中子类调用父类函数的方法示例
Aug 18 Python
Python实现的堆排序算法示例
Apr 29 Python
python中in在list和dict中查找效率的对比分析
May 04 Python
Python中交换两个元素的实现方法
Jun 29 Python
django mysql数据库及图片上传接口详解
Jul 18 Python
详解Python打包分发工具setuptools
Aug 05 Python
Django获取该数据的上一条和下一条方法
Aug 12 Python
三个python爬虫项目实例代码
Dec 28 Python
Pytorch之contiguous的用法
Dec 31 Python
如何基于Python + requests实现发送HTTP请求
Jan 13 Python
利用Python批量压缩png方法实例(支持过滤个别文件与文件夹)
Jul 30 #Python
Python利用BeautifulSoup解析Html的方法示例
Jul 30 #Python
利用python获取当前日期前后N天或N月日期的方法示例
Jul 30 #Python
Python 装饰器使用详解
Jul 29 #Python
python实现数据图表
Jul 29 #Python
基于Python的XSS测试工具XSStrike使用方法
Jul 29 #Python
使用Kivy将python程序打包为apk文件
Jul 29 #Python
You might like
探讨file_get_contents与curl效率及稳定性的分析
2013/06/06 PHP
PHP+jQuery 注册模块的改进(一):验证码存入SESSION
2014/10/14 PHP
PHP操作mysql数据库分表的方法
2016/06/09 PHP
如何简单地用YUI做JavaScript动画
2007/03/10 Javascript
javascript入门·图片对象(无刷新变换图片)\滚动图像
2007/10/01 Javascript
JavaScript 读取元素的CSS信息的代码
2010/02/07 Javascript
jQuery1.6 使用方法二
2011/11/23 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
Jquery实现点击按钮,连续地向textarea中添加值的实例代码
2014/03/08 Javascript
pace.js页面加载进度条插件
2015/09/29 Javascript
Javascript编程中几种继承方式比较分析
2015/11/28 Javascript
JavaScript 对象字面量讲解
2016/06/06 Javascript
详解AngularJs HTTP响应拦截器实现登陆、权限校验
2017/04/11 Javascript
ZeroClipboard.js使用一个flash复制多个文本框
2017/06/19 Javascript
浅谈webpack下的AOP式无侵入注入
2017/11/12 Javascript
详解JavaScript中的数组合并方法和对象合并方法
2018/05/11 Javascript
JavaScript定时器常见用法实例分析
2019/11/15 Javascript
JS实现基本的网页计算器功能示例
2020/01/16 Javascript
[47:48]DOTA2上海特级锦标赛D组小组赛#2 Liquid VS VP第三局
2016/02/28 DOTA
python实现的阳历转阴历(农历)算法
2014/04/25 Python
Python定时执行之Timer用法示例
2015/05/27 Python
Python中方法链的使用方法
2016/02/23 Python
python中的turtle库函数简单使用教程
2018/07/23 Python
Python实现数值积分方式
2019/11/20 Python
分享30个新鲜的CSS3打造的精美绚丽效果(附演示下载)
2012/12/28 HTML / CSS
CSS3制作漂亮的照片墙的实现代码
2016/06/08 HTML / CSS
同步和异步有何异同,在什么情况下分别使用他们?
2012/12/28 面试题
个人求职简历的自我评价范文
2013/10/09 职场文书
餐厅经理岗位职责范本
2014/02/17 职场文书
材料会计岗位职责
2014/03/06 职场文书
公司承诺书范文
2014/05/19 职场文书
亚运会口号
2014/06/20 职场文书
总经理助理岗位职责范本
2014/07/20 职场文书
岳麓书院导游词
2015/02/03 职场文书
员工辞职信范文大全
2015/05/12 职场文书
Python办公自动化PPT批量转换操作
2021/09/15 Python