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的Django框架中的Context使用
Jul 15 Python
Python运算符重载详解及实例代码
Mar 07 Python
Python编程实现使用线性回归预测数据
Dec 07 Python
python绘制立方体的方法
Jul 02 Python
django.db.utils.ProgrammingError: (1146, u“Table‘’ doesn’t exist”)问题的解决
Jul 13 Python
Python实现定时自动关闭的tkinter窗口方法
Feb 16 Python
Python基础学习之函数方法实例详解
Jun 18 Python
使用PyCharm进行远程开发和调试的实现
Nov 04 Python
Python 复平面绘图实例
Nov 21 Python
Python sys模块常用方法解析
Feb 20 Python
Django 允许局域网中的机器访问你的主机操作
May 13 Python
讲解Python实例练习逆序输出字符串
May 06 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开发过程中常用函数收藏
2009/12/14 PHP
PHP利用str_replace防注入的方法
2013/11/10 PHP
phpQuery占用内存过多的处理方法
2013/11/13 PHP
CI框架学习笔记(一) - 环境安装、基本术语和框架流程
2014/10/26 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
2014/12/05 PHP
php自定义函数转换html标签示例
2016/09/29 PHP
PHP实现笛卡尔积算法的实例讲解
2019/12/22 PHP
6个DIV 135或246间隔一秒轮番显示效果
2010/07/24 Javascript
jquery的Theme和Theme Switcher使用小结
2010/09/08 Javascript
js调用打印机打印网页字体总是缩小一号的解决方法
2014/01/24 Javascript
jQuery实现的一个tab切换效果内部还嵌有切换
2014/08/10 Javascript
怎么通过onclick事件获取js函数返回值(代码少)
2015/07/28 Javascript
JavaScript之RegExp_动力节点Java学院整理
2017/06/29 Javascript
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
vue实现的请求服务器端API接口示例
2019/05/25 Javascript
layuiAdmin循环遍历展示商品图片列表的方法
2019/09/16 Javascript
解决 window.onload 被覆盖的问题方法
2020/01/14 Javascript
解决js中的setInterval清空定时器不管用问题
2020/11/17 Javascript
原生js实现自定义滚动条
2021/01/20 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
理解Python垃圾回收机制
2016/02/12 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
解决pandas.DataFrame.fillna 填充Nan失败的问题
2018/11/06 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
Python深拷贝与浅拷贝用法实例分析
2019/05/05 Python
python turtle库画一个方格和圆实例
2019/06/27 Python
pycharm显示远程图片的实现
2019/11/04 Python
Tensorflow限制CPU个数实例
2020/02/06 Python
tensorflow 实现从checkpoint中获取graph信息
2020/02/10 Python
兰蔻英国官网:Lancome英国
2019/04/30 全球购物
新闻网站实习自我鉴定
2013/09/25 职场文书
党员一句话承诺大全
2014/03/28 职场文书
暑期教师培训方案
2014/06/07 职场文书
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle
MySQL中rank() over、dense_rank() over、row_number() over用法介绍
2022/03/23 MySQL
Python实战实现爬取天气数据并完成可视化分析详解
2022/06/16 Python