NumPy 如何生成多维数组的方法


Posted in Python onFebruary 05, 2018

Python现在是最热门的人工智能语言,各种工具的支持如Google的Tensorflow,都是首选支持Python的。

但是,与R语言不同,Python语言设计时,并没有考虑对于矩阵运算,统计计算等功能做专项支持。于是我们需要NumPy库来补足这一能力上的不足。

NumPy是Python的著名扩展库,相当于Python中的MATLAB。

Numpy 中,ndarray 类具有六个参数,它们分别为:

  1. shape:数组的形状。
  2. dtype:数据类型。
  3. buffer:对象暴露缓冲区接口。
  4. offset:数组数据的偏移量。
  5. strides:数据步长。
  6. order:{'C','F'},以行或列为主排列顺序。

如何生成多维数组

初识ndarray多维数组

在算法中我们最经常用到的就是矩阵,我们就从矩阵开始说起吧。
NumPy中,使用二维的多维数组ndarray来存储矩阵。

例:

a3 = np.array([[1,0],[0,1]])

会生成这样一个多维数组对象

array([[1, 0],
  [0, 1]])

生成数组序列

通过开始值、结束值和步长值生成数组序列 - arange

可以通过arange函数来生成指定开始值,结束值和步长值的一维数组。请注意,结束值并不包含在序列中,也就是说结束值是开区间。

In [25]: a4 = np.arange(1,10,1)

In [26]: a4
Out[26]: array([1, 2, 3, 4, 5, 6, 7, 8, 9])

线性序列 - linspace

与arange类似,linspace通过给定初值、终值和元素个数来生成序列。是否包含终值可以通过endpoint属性来设置。

例:

In [37]: a8 = np.linspace(1,10,10,endpoint=True)

In [38]: a8
Out[38]: array([ 1., 2., 3., 4., 5., 6., 7., 8., 9., 10.])

等比序列 - logspace

除了线性的等差数列,我们也可以通过等比数列的方式来生成一维数组。

默认是以10的n次方为参数,比如logspace(0,4,3)的意思是,初值为10的0次方,即1,终值是10的4次方,即100,一共生成3个值。

例,生成[1,100,10000]

In [47]: a9 = np.logspace(0,4,3)

In [48]: a9
Out[48]: array([ 1.00000000e+00, 1.00000000e+02, 1.00000000e+04])

我们当然也可以修改基数,比如改成3:

In [53]: a10 = np.logspace(1,5,3,base=3)

In [54]: a10
Out[54]: array([ 3., 27., 243.])

改变多维数组的形状

如果有一个一维数组要转为多维数组,可以通过修改shape属性来实现。

我们可以先将数据存在一维数组中,可以用列表或者元组来生成一维数组,它们是等价的:

例:

In [2]: a1 = np.array([1,2,3,4])

In [3]: a1
Out[3]: array([1, 2, 3, 4])

In [4]: a2 = np.array((1,0,0,1))

In [5]: a2
Out[5]: array([1, 0, 0, 1])

我们通过shape属性来查看一个数组的形状:

In [14]: a1.shape
Out[14]: (4,)

In [15]: a2.shape
Out[15]: (4,)

shape属性是可以直接修改的,比如我们想把上面的a1改成2 x 2的矩阵,就直接改shape值就是了:

In [16]: a1.shape = 2,2

In [17]: a1
Out[17]: 
array([[1, 2],
  [3, 4]])

如果能确定一个轴,另一个可以赋-1让系统自己去算。

例:

In [18]: a2.shape= 2,-1

In [19]: a2
Out[19]: 
array([[1, 0],
  [0, 1]])

如果想保持这个数组不变,生成一个形状改变的新数组,可以调用reshape方法。

例:我们将一个25个元素的数组生成一个5x5的新数组

In [59]: a11 = np.linspace(1,100,25)

In [60]: a11
Out[60]: 
array([ 1. , 5.125, 9.25 , 13.375, 17.5 , 21.625,
   25.75 , 29.875, 34. , 38.125, 42.25 , 46.375,
   50.5 , 54.625, 58.75 , 62.875, 67. , 71.125,
   75.25 , 79.375, 83.5 , 87.625, 91.75 , 95.875, 100. ])

In [61]: a12 = a11.reshape(5,-1)

In [62]: a12
Out[62]: 
array([[ 1. , 5.125, 9.25 , 13.375, 17.5 ],
  [ 21.625, 25.75 , 29.875, 34. , 38.125],
  [ 42.25 , 46.375, 50.5 , 54.625, 58.75 ],
  [ 62.875, 67. , 71.125, 75.25 , 79.375],
  [ 83.5 , 87.625, 91.75 , 95.875, 100. ]])

直接生成多维数组

生成全0的数组

zeros生成全是0的数组,第一个参数是shape

例:

In [65]: np.zeros((10,10))
Out[65]: 
array([[ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.],
  [ 0., 0., 0., 0., 0., 0., 0., 0., 0., 0.]])

生成全是1的数组

例:

In [66]: np.ones((5,5))
Out[66]: 
array([[ 1., 1., 1., 1., 1.],
  [ 1., 1., 1., 1., 1.],
  [ 1., 1., 1., 1., 1.],
  [ 1., 1., 1., 1., 1.],
  [ 1., 1., 1., 1., 1.]])

只生成空数组

empty不赋初值,是最快速的方法

例:

In [67]: np.empty((3,3))
Out[67]: 
array([[ 1. , 2.125, 3.25 ],
  [ 4.375, 5.5 , 6.625],
  [ 7.75 , 8.875, 10. ]])

通过函数来生成数组

通过fromfunction函数可以通过一个函数来生成想要的数组。

例,生成九九乘法表:

In [125]: def mul2(x,y):
  ...:  return (x+1)*(y+1)
  ...: 

In [126]: np.fromfunction(mul2,(9,9))
Out[126]: 
array([[ 1., 2., 3., 4., 5., 6., 7., 8., 9.],
  [ 2., 4., 6., 8., 10., 12., 14., 16., 18.],
  [ 3., 6., 9., 12., 15., 18., 21., 24., 27.],
  [ 4., 8., 12., 16., 20., 24., 28., 32., 36.],
  [ 5., 10., 15., 20., 25., 30., 35., 40., 45.],
  [ 6., 12., 18., 24., 30., 36., 42., 48., 54.],
  [ 7., 14., 21., 28., 35., 42., 49., 56., 63.],
  [ 8., 16., 24., 32., 40., 48., 56., 64., 72.],
  [ 9., 18., 27., 36., 45., 54., 63., 72., 81.]])

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Python 相关文章推荐
wxPython之解决闪烁的问题
Jan 15 Python
根据DataFrame某一列的值来选择具体的某一行方法
Jul 03 Python
对Python 窗体(tkinter)文本编辑器(Text)详解
Oct 11 Python
对PyQt5中树结构的实现方法详解
Jun 17 Python
在Pandas中处理NaN值的方法
Jun 25 Python
详解Python3 pickle模块用法
Sep 16 Python
使用python 将图片复制到系统剪贴中
Dec 13 Python
浅谈python中频繁的print到底能浪费多长时间
Feb 21 Python
PyTorch中torch.tensor与torch.Tensor的区别详解
May 18 Python
python中plt.imshow与cv2.imshow显示颜色问题
Jul 16 Python
scrapy与selenium结合爬取数据(爬取动态网站)的示例代码
Sep 28 Python
Django+Django-Celery+Celery的整合实战
Jan 20 Python
python生成器,可迭代对象,迭代器区别和联系
Feb 04 #Python
python实现mysql的读写分离及负载均衡
Feb 04 #Python
python负载均衡的简单实现方法
Feb 04 #Python
python爬虫爬取某站上海租房图片
Feb 04 #Python
Python爬虫实现百度图片自动下载
Feb 04 #Python
Python中的defaultdict与__missing__()使用介绍
Feb 03 #Python
Python网络爬虫神器PyQuery的基本使用教程
Feb 03 #Python
You might like
一个PHP操作Access类(PHP+ODBC+Access)
2007/01/02 PHP
php使用memcoder将视频转成mp4格式的方法
2015/03/12 PHP
中高级PHP程序员应该掌握哪些技术?
2016/09/23 PHP
详细解读php的命名空间(二)
2018/02/21 PHP
利用PHP内置SERVER开启web服务(本地开发使用)
2020/01/22 PHP
PHP7移除的扩展和SAPI
2021/03/09 PHP
IE6下JS动态设置图片src地址问题
2010/01/08 Javascript
div+css布局的图片连续滚动js实现代码
2010/05/04 Javascript
一个Action如何调用两个不同的方法
2014/05/22 Javascript
JavaScript中join()方法的使用简介
2015/06/09 Javascript
js HTML5多图片上传及预览实例解析(不含前端的文件分割)
2016/08/26 Javascript
Bootstrap学习笔记之环境配置(1)
2016/12/07 Javascript
javascript实现一个网页加载进度loading
2017/01/04 Javascript
原生js实现轮播图
2017/02/27 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
解决angularJS中input标签的ng-change事件无效问题
2018/09/13 Javascript
详解React 服务端渲染方案完美的解决方案
2018/12/14 Javascript
Three.JS实现三维场景
2018/12/30 Javascript
js实现3D照片墙效果
2019/10/28 Javascript
js实现鼠标拖拽div左右滑动
2020/01/15 Javascript
[03:41]DOTA2上海特锦赛小组赛第三日recap精彩回顾
2016/02/28 DOTA
[01:30]我们共输赢 完美世界城市挑战赛开启全新赛季
2019/04/19 DOTA
PYTHON 中使用 GLOBAL引发的一系列问题
2016/10/12 Python
python实现人脸识别代码
2017/11/08 Python
Python模块、包(Package)概念与用法分析
2019/05/31 Python
Python使用matplotlib 模块scatter方法画散点图示例
2019/09/27 Python
解决安装pyqt5之后无法打开spyder的问题
2019/12/13 Python
python实现微信打飞机游戏
2020/03/24 Python
Pycharm2020.1安装中文语言插件的详细教程(不需要汉化)
2020/08/07 Python
戴尔英国翻新电脑和电子产品:Dell UK Refurbished Computers
2019/07/30 全球购物
故意伤害人身损害赔偿协议书
2014/11/19 职场文书
党员个人总结自评
2015/02/14 职场文书
高考作弊检讨书1500字
2015/02/16 职场文书
个人求职意向书
2015/05/11 职场文书
小学六一主持词开场白
2015/05/28 职场文书
深入理解Pytorch微调torchvision模型
2021/11/11 Python