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 相关文章推荐
Python getopt模块处理命令行选项实例
May 13 Python
Python2.x和3.x下maketrans与translate函数使用上的不同
Apr 13 Python
解读Django框架中的低层次缓存API
Jul 24 Python
python dict.get()和dict['key']的区别详解
Jun 30 Python
Python爬虫之xlml解析库(全面了解)
Aug 08 Python
Python中用post、get方式提交数据的方法示例
Sep 22 Python
opencv调整图像亮度对比度的示例代码
Sep 27 Python
softmax及python实现过程解析
Sep 30 Python
浅谈keras中的Merge层(实现层的相加、相减、相乘实例)
May 23 Python
解决python3输入的坑——input()
Dec 05 Python
Python 文本滚动播放器的实现代码
Apr 25 Python
Python+DeOldify实现老照片上色功能
Jun 21 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中HTTP方式下的Gzip压缩传输方法举偶
2007/02/15 PHP
Windows7下PHP开发环境安装配置图文方法
2010/05/20 PHP
使用GruntJS构建Web程序之合并压缩篇
2014/06/06 Javascript
JavaScript变量的作用域全解析
2015/08/14 Javascript
在javascript中使用com组件的简单实现方法
2016/08/17 Javascript
JS实现最简单的冒泡排序算法
2017/02/15 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
js实现随机数字字母验证码
2017/06/19 Javascript
对vue.js中this.$emit的深入理解
2018/02/23 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
react 父子组件之间通讯props
2018/09/08 Javascript
JS轮播图的实现方法2
2020/08/25 Javascript
[40:03]Liquid vs Optic 2018国际邀请赛淘汰赛BO3 第一场 8.21
2018/08/22 DOTA
Python 返回汉字的汉语拼音
2009/02/27 Python
python 动态获取当前运行的类名和函数名的方法
2014/04/15 Python
python通过装饰器检查函数参数数据类型的方法
2015/03/13 Python
win系统下为Python3.5安装flask-mongoengine 库
2016/12/20 Python
python3 破解 geetest(极验)的滑块验证码功能
2018/02/24 Python
使用turtle绘制五角星、分形树
2019/10/06 Python
Python切图九宫格的实现方法
2019/10/10 Python
Python内建序列通用操作6种实现方法
2020/03/26 Python
Django Auth用户认证组件实现代码
2020/10/13 Python
python实现三种随机请求头方式
2021/01/05 Python
使用纯 CSS 创作一个脉动 loader效果的源码
2018/09/28 HTML / CSS
世界上最大的餐具公司:Oneida
2016/12/17 全球购物
EJB发布WEB服务一般步骤
2012/10/31 面试题
高校毕业生登记表自我鉴定
2013/11/03 职场文书
2014年计算机专业个人自我评价
2014/01/19 职场文书
天地会口号
2014/06/17 职场文书
标准版离职证明书
2014/09/12 职场文书
2014学习优秀共产党员先进事迹材料思想汇报
2014/09/14 职场文书
祖国在我心中演讲稿(小学生)
2014/09/23 职场文书
幼儿园推普周活动总结
2015/05/07 职场文书
Golang 编译成DLL文件的操作
2021/05/06 Golang
浅谈Python类的单继承相关知识
2021/05/12 Python
SQL解决未能删除约束问题drop constraint
2022/05/30 SQL Server