浅谈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 不关闭控制台的实现方法
Oct 23 Python
python实现挑选出来100以内的质数
Mar 24 Python
Python 内置函数complex详解
Oct 23 Python
python操作 hbase 数据的方法
Dec 18 Python
python 用lambda函数替换for循环的方法
Jun 09 Python
详解flask表单提交的两种方式
Jul 21 Python
使用Flask-Cache缓存实现给Flask提速的方法详解
Jun 11 Python
python 字典的打印实现
Sep 26 Python
python 解决print数组/矩阵无法完整输出的问题
Feb 19 Python
详解tensorflow之过拟合问题实战
Nov 01 Python
python定时截屏实现
Nov 02 Python
pycharm使用技巧之自动调整代码格式总结
Nov 04 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中限制IP段访问、禁止IP提交表单的代码
2011/04/23 PHP
Windows下编译PHP5.4和xdebug全记录
2015/04/03 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP实现字符串大小写转函数的功能实例
2019/02/06 PHP
JavaScript 异步调用框架 (Part 3 - 代码实现)
2009/08/04 Javascript
js数组的基本用法及数组根据下标(数值或字符)移除元素
2013/10/20 Javascript
一个检测表单数据的JavaScript实例
2014/10/31 Javascript
JQuery删除DOM节点的方法
2015/06/11 Javascript
js实现页面跳转的几种方法小结
2016/05/16 Javascript
yarn与npm的命令行小结
2016/10/20 Javascript
JavaScript正则表达式替换字符串中图片地址(img src)的方法
2017/01/13 Javascript
JavaScript实现带有子菜单和控件的slider轮播图效果
2017/11/01 Javascript
jQuery Validate插件ajax方式验证输入值的实例
2017/12/21 jQuery
vue 插值 v-once,v-text, v-html详解
2018/01/19 Javascript
tweenjs缓动算法的使用实例分析
2019/08/26 Javascript
[01:07:19]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第一场
2018/04/06 DOTA
[42:20]Secret vs Liquid 2019国际邀请赛小组赛 BO2 第二场 8.15
2019/08/17 DOTA
Python编程中的for循环语句学习教程
2015/10/14 Python
python的numpy模块安装不成功简单解决方法总结
2017/12/23 Python
快速解决PyCharm无法引用matplotlib的问题
2018/05/24 Python
python批量识别图片指定区域文字内容
2019/04/30 Python
python卸载后再次安装遇到的问题解决
2019/07/10 Python
基于Python实现ComicReaper漫画自动爬取脚本过程解析
2019/11/11 Python
python标准库OS模块详解
2020/03/10 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
Pandas之缺失数据的实现
2021/01/06 Python
python 合并多个excel中同名的sheet
2021/01/22 Python
KIKO美国官网:意大利的平价彩妆品牌
2017/05/16 全球购物
荷兰家电购物网站:Expert.nl
2020/01/18 全球购物
英国顶尖手表珠宝品牌独家授权经销商:HS Johnson
2020/10/28 全球购物
应届毕业生求职信范文
2013/12/18 职场文书
银行职员自我鉴定
2014/04/20 职场文书
2015年小学一年级班主任工作总结
2015/05/21 职场文书
外出听课学习心得体会
2016/01/15 职场文书
Pandas数据类型之category的用法
2021/06/28 Python
使用javascript解析二维码的三种方式
2021/11/11 Javascript