浅谈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环境配置及项目建立
Jun 30 Python
简单实现python收发邮件功能
Jan 05 Python
dataframe 按条件替换某一列中的值方法
Jan 29 Python
快速排序的四种python实现(推荐)
Apr 03 Python
python运用pygame库实现双人弹球小游戏
Nov 25 Python
Python正则表达式急速入门(小结)
Dec 16 Python
pytorch实现MNIST手写体识别
Feb 14 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
python温度转换华氏温度实现代码
Dec 06 Python
plt.figure()参数使用详解及运行演示
Jan 08 Python
Python turtle实现贪吃蛇游戏
Jun 18 Python
移除Selenium中window.navigator.webdriver值
Jun 10 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框架的性能
2008/01/10 PHP
PHP 批量更新网页内容实现代码
2010/01/05 PHP
php中去除所有js,html,css代码
2010/10/12 PHP
PHP错误抑制符(@)导致引用传参失败Bug的分析
2011/05/02 PHP
PHP对象Object的概念 介绍
2012/06/14 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
php加速器eAccelerator的配置参数、API详解
2014/05/05 PHP
使用JavaScript创建新样式表和新样式规则
2016/06/14 PHP
PHP Socket网络操作类定义与用法示例
2017/08/30 PHP
jquery easyui combox一些实用的小方法
2013/12/25 Javascript
js和css写一个可以自动隐藏的悬浮框
2014/03/05 Javascript
jQuery封装的tab选项卡插件分享
2015/06/16 Javascript
JavaScript中两个字符串的匹配
2016/06/08 Javascript
仿Angular Bootstrap TimePicker创建分钟数-秒数的输入控件
2016/07/01 Javascript
Canvas + JavaScript 制作图片粒子效果
2017/02/08 Javascript
js实现文字无缝向上滚动
2017/02/16 Javascript
小程序页面动态配置实现方法
2019/02/05 Javascript
微信小程序 select 下拉框组件功能
2019/09/09 Javascript
Vue实现简单购物车功能
2020/12/13 Vue.js
深入浅析python 协程与go协程的区别
2019/05/09 Python
python 提取文件指定列的方法示例
2019/08/07 Python
Python Django 命名空间模式的实现
2019/08/09 Python
django有外键关系的两张表如何相互查找
2020/02/10 Python
Python3 + Appium + 安卓模拟器实现APP自动化测试并生成测试报告
2021/01/27 Python
HTML5中外部浏览器唤起微信分享功能的代码
2020/09/15 HTML / CSS
丝芙兰波兰:Sephora.pl
2018/03/25 全球购物
餐饮加盟计划书
2014/01/10 职场文书
庆七一活动方案
2014/01/25 职场文书
行政主管职责范本
2014/03/07 职场文书
2015年班组工作总结
2015/04/20 职场文书
学历证明样本
2015/06/16 职场文书
西部计划志愿者工作总结
2015/08/11 职场文书
CSS3实现模糊背景的三种效果示例
2021/03/30 HTML / CSS
JavaScript原型链详解
2021/11/07 Javascript
Windows server 2012搭建FTP服务器
2022/04/29 Servers
python神经网络ResNet50模型
2022/05/06 Python