浅谈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中的rjust()方法使用详解
May 19 Python
python实现获取Ip归属地等信息
Aug 27 Python
利用python为运维人员写一个监控脚本
Mar 25 Python
使用实现XlsxWriter创建Excel文件并编辑
May 04 Python
python实现将读入的多维list转为一维list的方法
Jun 28 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python爬虫 Pyppeteer使用方法解析
Sep 28 Python
python装饰器的特性原理详解
Dec 25 Python
TensorBoard 计算图的可视化实现
Feb 15 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
python 实现简单的计算器(gui界面)
Nov 11 Python
整理Python中常用的conda命令操作
Jun 15 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和.net中des加解密的实现方法
2013/02/27 PHP
ThinkPHP模板之变量输出、自定义函数与判断语句用法
2014/11/01 PHP
thinkphp命名空间用法实例详解
2015/12/30 PHP
Yii视图CGridView列表用法实例分析
2016/07/12 PHP
Yii框架防止sql注入,xss攻击与csrf攻击的方法
2016/10/18 PHP
PHPExcel实现的读取多工作表操作示例
2020/04/14 PHP
下载站控制介绍字数显示的脚本 显示全部 隐藏介绍等功能
2009/09/19 Javascript
JavaScript 学习笔记(十四) 正则表达式
2010/01/22 Javascript
javascript实现促销倒计时+fixed固定在底部
2013/09/18 Javascript
js charAt的使用示例
2014/02/18 Javascript
js实现图片从左往右渐变切换效果的方法
2015/02/06 Javascript
深入理解JavaScript中的箭头函数
2015/07/28 Javascript
jQuery简单实现两级下拉菜单效果代码
2015/09/15 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
详解Angular的双向数据绑定(MV-VM)
2016/12/26 Javascript
javascript 网页进度条简单实例
2017/02/22 Javascript
如何使用vuejs实现更好的Form validation?
2017/04/07 Javascript
node.js将MongoDB数据同步到MySQL的步骤
2017/12/10 Javascript
基于js中的存储键值对以及注意事项介绍
2018/03/30 Javascript
VueJs组件之父子通讯的方式
2018/05/06 Javascript
vue中axios的封装问题(简易版拦截,get,post)
2018/06/15 Javascript
python绘图库Matplotlib的安装
2014/07/03 Python
Python使用chardet判断字符编码
2015/05/09 Python
python网络编程调用recv函数完整接收数据的三种方法
2017/03/31 Python
python+POP3实现批量下载邮件附件
2018/06/19 Python
django2.0扩展用户字段示例
2019/02/13 Python
使用Python进行防病毒免杀解析
2019/12/13 Python
Tensorflow 卷积的梯度反向传播过程
2020/02/10 Python
Jupyter notebook运行Spark+Scala教程
2020/04/10 Python
Python如何爬取qq音乐歌词到本地
2020/06/01 Python
施工材料员岗位职责
2014/02/12 职场文书
会计专业职业规划:规划自我赢取未来
2014/02/12 职场文书
计算机求职信
2014/07/02 职场文书
国际语言毕业生求职信
2014/07/08 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
React中的Context应用场景分析
2021/06/11 Javascript