浅谈numpy中函数resize与reshape,ravel与flatten的区别


Posted in Python onJune 18, 2020

这两组函数中区别很是类似,都是一个不改变之前的数组,一个改变数组本身

resize和reshape

>>> import numpy as np
>>> a = np.arange(20).reshape(4,5)
>>> a
array([[ 0, 1, 2, 3, 4],
 [ 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14],
 [15, 16, 17, 18, 19]])
>>> a.reshape(2,10)
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])
>>> a
array([[ 0, 1, 2, 3, 4],
 [ 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14],
 [15, 16, 17, 18, 19]])
>>> a.resize(2,10)
>>> a
array([[ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9],
 [10, 11, 12, 13, 14, 15, 16, 17, 18, 19]])

两个函数都是改变数组的形状,但是resize是在本身上进行操作,reshape返回的是修改之后的参数

ravel和flatten

两者都可以将数组转换为一个维,

flatten(order='C')

参数:{‘C',‘F',‘A',‘K'}

默认情况下‘C'以行为主的顺序展开,‘F'(Fortran风格)意味着以列的顺序展开,‘A'表示如果a在内存中为Fortran连续,则按列展开,否则以行展开,‘K'按照元素在内存中出现的顺序展平a。

>>> a = np.arange(6).reshape(2,3)
>>> a.flatten()
array([0, 1, 2, 3, 4, 5])
>>> a.ravel()
array([0, 1, 2, 3, 4, 5])
>>> a.flatten('F')
array([0, 3, 1, 4, 2, 5])
>>> a.ravel('F')
array([0, 3, 1, 4, 2, 5])
>>>
>>> x = np.array([[1,2],[3,4]])
>>> a = np.arange(6).reshape(2,3)
>>> a.flatten()[...] = 1
>>> a
array([[0, 1, 2],
 [3, 4, 5]])
>>> a.ravel()[...] = 1
>>> a
array([[1, 1, 1],
 [1, 1, 1]])
>>>

flatten不会影响原始矩阵,返回的是一个副本,但是ravel是会修改数组

补充知识:【Numpy】维度变化reshape、ravel、flatten、transpose、resize、swapaxes

0. 首先,创建一个多维数组

from numpy import *
a = arange(24)

得到:

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

1.reshape 函数

b = a.reshape(2,3,4)
print(b)

得到一个 2*3*4 维的数组:

[[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]]
 
 [[12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]]

可以想象成2层小洋楼,每层有 3*4 个房间

2.ravel函数 可以将多维数组展平(也就是变回一维)

c = b.ravel()
print(c)

得到一维数组

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

3.flatten函数 也是将多维数组展平,与ravel函数的功能相同,不过flatten函数会请求分配内存来保存结果,而ravel函数只是返回数组的一个视图(view)

c = b.flatten()
print(c)

得到一维数组

[ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23]

4.用元组设置维度

直接用一个正整数元组来设置数组的维度

b.shape = (6,4)
print(b)

这种做法将直接改变所操作的数组,现在数组b变成了一个 6*4 的多维数组

[[ 0 1 2 3]
 [ 4 5 6 7]
 [ 8 9 10 11]
 [12 13 14 15]
 [16 17 18 19]
 [20 21 22 23]]

5.transpose函数 将矩阵进行转置

d = b.transpose()
print(d)

得到 4*6 的多维数组

[[ 0 4 8 12 16 20]
 [ 1 5 9 13 17 21]
 [ 2 6 10 14 18 22]
 [ 3 7 11 15 19 23]]

6.transpose函数 将矩阵按照设定维度变换顺序

b = a.reshape(2,3,4)
c = b.transpose((2,1,0))
print(c)

得到一个形状为4*3*2的数组:

array([[[ 0, 12],
 [ 4, 16],
 [ 8, 20]],
 [[ 1, 13],
 [ 5, 17],
 [ 9, 21]],
 [[ 2, 14],
 [ 6, 18],
 [10, 22]],
 [[ 3, 15],
 [ 7, 19],
 [11, 23]]])

7.resize函数和reshape函数的功能一样,但resize会直接修改所操作的数组

b.resize((2,12))
print(b)

得到 2*12 的两维数组

[[ 0 1 2 3 4 5 6 7 8 9 10 11]
[12 13 14 15 16 17 18 19 20 21 22 23]]

并且这一步不可以通过赋值来实现,如下所示:

e = b.resize((2,12))
print(e)

此时结果为:

None

8.swapaxes(ax1,ax2) : 将数组n个维度中两个维度进行调换,不改变原数组

b = a.reshape(2,3,4)
c = b.swapaxes(0,2)
print(c)

得到一个形状为4*3*2的数组(可以和6.transpose函数进行比较来看):

array([[[ 0, 12],
 [ 4, 16],
 [ 8, 20]],
 [[ 1, 13],
 [ 5, 17],
 [ 9, 21]],
 [[ 2, 14],
 [ 6, 18],
 [10, 22]],
 [[ 3, 15],
 [ 7, 19],
 [11, 23]]])

以上这篇浅谈numpy中函数resize与reshape,ravel与flatten的区别就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实现将MySQL数据库表中的数据导出生成csv格式文件的方法
Jan 11 Python
python处理csv数据动态显示曲线实例代码
Jan 23 Python
python文件写入write()的操作
May 14 Python
python实现QQ批量登录功能
Jun 19 Python
用python做游戏的细节详解
Jun 25 Python
Django框架之登录后自定义跳转页面的实现方法
Jul 18 Python
django admin组件使用方法详解
Jul 19 Python
python3 selenium自动化测试 强大的CSS定位方法
Aug 23 Python
使用tensorflow显示pb模型的所有网络结点方式
Jan 23 Python
Python3 xml.etree.ElementTree支持的XPath语法详解
Mar 06 Python
Python 实现将大图切片成小图,将小图组合成大图的例子
Mar 14 Python
如何利用Matlab制作一款真正的拼图小游戏
May 11 Python
python名片管理系统开发
Jun 18 #Python
一文轻松掌握python语言命名规范规则
Jun 18 #Python
Python学习之路之pycharm的第一个项目搭建过程
Jun 18 #Python
基于PyTorch的permute和reshape/view的区别介绍
Jun 18 #Python
Python Switch Case三种实现方法代码实例
Jun 18 #Python
Python3开发环境搭建详细教程
Jun 18 #Python
Python collections.defaultdict模块用法详解
Jun 18 #Python
You might like
php获取$_POST同名参数数组的实现介绍
2013/06/30 PHP
PHP版QQ互联OAuth示例代码分享
2015/07/05 PHP
windows7配置Nginx+php+mysql的详细教程
2016/09/04 PHP
php中strtotime函数性能分析
2016/11/20 PHP
PHP获取二叉树镜像的方法
2018/01/17 PHP
javascript 简单高效判断数据类型 系列函数 By shawl.qiu
2007/03/06 Javascript
用倒置滤镜把div倒置,再把table倒置。
2007/07/31 Javascript
IE 条件注释详解总结(附实例代码)
2009/08/29 Javascript
让低版本浏览器支持input的placeholder属性(js方法)
2013/04/03 Javascript
JQUERY的AJAX请求缓存里的数据问题处理
2016/02/23 Javascript
JS中判断字符串中出现次数最多的字符及出现的次数的简单实例
2016/06/03 Javascript
微信小程序购物商城系统开发系列-目录结构介绍
2016/11/21 Javascript
jQuery Autocomplete简介_动力节点Java学院整理
2017/07/17 jQuery
js动态添加表格逐行添加、删除、遍历取值的实例代码
2018/01/25 Javascript
代码详解JS操作剪贴板
2018/02/11 Javascript
JavaScript 格式化数字、金额、千分位、保留几位小数、舍入舍去
2019/07/23 Javascript
vue同个按钮控制展开和折叠同个事件操作
2020/07/29 Javascript
[02:37]2018DOTA2亚洲邀请赛赛前采访 VP.no[o]ne心中最强SOLO是谁
2018/04/04 DOTA
[01:11:02]Secret vs Newbee 2019国际邀请赛小组赛 BO2 第一场 8.15
2019/08/17 DOTA
Python 基础之字符串string详解及实例
2017/04/01 Python
Anaconda入门使用总结
2018/04/05 Python
Pandas 合并多个Dataframe(merge,concat)的方法
2018/06/08 Python
基于windows下pip安装python模块时报错总结
2018/06/12 Python
利用python循环创建多个文件的方法
2018/10/25 Python
Python中的枚举类型示例介绍
2019/01/09 Python
完美解决ARIMA模型中plot_acf画不出图的问题
2020/06/04 Python
详解在Python中使用Torchmoji将文本转换为表情符号
2020/07/27 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
关于HTML5的22个初级技巧(图文教程)
2012/06/21 HTML / CSS
阿迪达斯丹麦官网:adidas丹麦
2016/10/01 全球购物
房屋买卖协议书范本
2014/04/10 职场文书
中华在我心中演讲稿
2014/09/13 职场文书
教师遵守党的政治纪律情况对照检查材料
2014/09/26 职场文书
2014年幼儿园学期工作总结
2014/12/05 职场文书
数据结构课程设计心得体会
2016/01/15 职场文书
Python办公自动化之Excel(中)
2021/05/24 Python