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求众数问题实例
Sep 26 Python
python集合类型用法分析
Apr 08 Python
浅谈python数据类型及类型转换
Dec 18 Python
Python 实现删除某路径下文件及文件夹的实例讲解
Apr 24 Python
numpy 计算两个数组重复程度的方法
Nov 07 Python
Python多图片合并PDF的方法
Jan 03 Python
在Python中合并字典模块ChainMap的隐藏坑【推荐】
Jun 27 Python
python中struct模块之字节型数据的处理方法
Aug 27 Python
Python 网络编程之UDP发送接收数据功能示例【基于socket套接字】
Oct 11 Python
python装饰器的特性原理详解
Dec 25 Python
Mac PyCharm中的.gitignore 安装设置教程
Apr 16 Python
tensorflow模型的save与restore,及checkpoint中读取变量方式
May 26 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
SONY ICF-SW07收音机电路分析
2021/03/02 无线电
php自动加载机制的深入分析
2013/06/08 PHP
php计算两个日期时间差(返回年、月、日)
2014/06/19 PHP
php中常见的sql攻击正则表达式汇总
2014/11/06 PHP
ThinkPHP控制器里javascript代码不能执行的解决方法
2014/11/22 PHP
jquery封装的对话框简单实现
2013/07/21 Javascript
新手快速学习JavaScript免费教程资源汇总
2015/06/25 Javascript
localResizeIMG先压缩后使用ajax无刷新上传(移动端)
2015/08/11 Javascript
jquery实现可旋转可拖拽的文字效果代码
2016/01/27 Javascript
AngularJS实现Input格式化的方法
2016/11/07 Javascript
浅析javascript中的Event事件
2016/12/09 Javascript
AngularJS框架中的双向数据绑定机制详解【减少需要重复的开发代码量】
2017/01/19 Javascript
JavaScript正则替换HTML标签功能示例
2017/03/02 Javascript
jQuery插件FusionCharts实现的MSBar2D图效果示例【附demo源码】
2017/03/24 jQuery
JS去掉字符串前后空格、阻止表单提交的实现代码
2017/06/08 Javascript
node前端模板引擎Jade之标签的基本写法
2018/05/11 Javascript
微信小程序实践之动态控制组件的显示/隐藏功能
2018/07/18 Javascript
vue-router的使用方法及含参数的配置方法
2018/11/13 Javascript
详解JS实现系统登录页的登录和验证
2019/04/29 Javascript
vue中watch和computed为什么能监听到数据的改变以及不同之处
2019/12/27 Javascript
Vant 在vue-cli 4.x中按需加载操作
2020/11/05 Javascript
Python实现字符串逆序输出功能示例
2017/06/24 Python
python获取本机所有IP地址的方法
2018/12/26 Python
python os.path.isfile()因参数问题判断错误的解决
2019/11/29 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
梅西酒窖:Macy’s Wine Cellar
2018/01/07 全球购物
贝尔帐篷精品店:Bell Tent Boutique
2019/06/12 全球购物
M.M.LaFleur官网:美国职业女装品牌
2020/10/27 全球购物
自荐书4要点
2014/01/25 职场文书
实习老师离校感言
2014/02/03 职场文书
《台湾的蝴蝶谷》教学反思
2014/02/20 职场文书
党员个人批评与自我批评
2014/10/14 职场文书
2014年扶贫工作总结
2014/11/18 职场文书
学生保证书
2015/01/16 职场文书
毕业设计答辩开场白
2015/05/29 职场文书
python 如何执行控制台命令与操作剪切板
2021/05/20 Python