【一文读懂】python 中的 numpy.reshape(a, newshape, order=‘C‘) 详细说明及实例讲解
文章目录
- numpy.reshape(a, newshape, order='C')
- 1. 参数
- 2. 返回值
- 3. 如何理解 "新形状newshape,与原形状兼容,元素个数相同" ?
- 4. 如何理解 order = {'C', 'F', 'A'} ?
numpy.reshape(a, newshape, order=‘C’)
在不改变数据的情况下给数组一个新的形状。
就是先将数组按给定索引顺序一维展开,然后按与展开时相同的索引顺序将展开的元素填充到新数组中;
即等价于
np.reshape(np.revel(array), newshape, order)
.
1. 参数
a : 数组类,要被重塑的数组。
newshape : 整数或整数元组,用于指示新数组的形状,格式(行row,列col,… )。
- 新的形状应该与原来的形状兼容,即元素个数必须相同。如果是一个整数,那么结果将是一个该长度的一维数组。
- 形状的其中一个维度可以是 -1,在这种情况下,新形状的该维度值是由数组的长度和其余维度自动推断出来的。
order: {‘C’, ‘F’, ‘A’}, 可选参数。
使用
a
的索引顺序读取其元素,并使用这个索引顺序将元素放入重塑的数组中。‘C’ , 行优先顺序 (表示使用类似 C 语言的索引顺序来读/写元素,最后一个轴的索引变化最快,回到第一个轴的索引变化最慢)。
‘F’ , 列优先顺序 (表示使用类似 Fortran 语言的索引顺序来读/写元素,第一个索引变化最快,最后一个索引变化最慢)。
‘A’ , 按存储顺序 (表示如果数组 ‘a’ 在内存中是类似 Fortran 语言的数组分布方式,则按照类似 Fortran 语言的索引顺序读/写元素,否则按照类似 C 语言的顺序)。
注意 ‘C’ 和 ‘F’ 选项没有考虑底层数组的内存布局,只是参考了索引的顺序。
2. 返回值
reshaped_array : ndarray (n维数组)
如果可能的话,这将是一个新的视图对象;否则,它将是一个副本。 注意不能保证返回数组的内存布局(C-或Fortran-连续的)。
3. 如何理解 “新形状newshape,与原形状兼容,元素个数相同” ?
"""newshape 只能是整数或整数元组若原形状是shape, shape的长度len(shape)=N, 那新形状newshape=(row, col, ...),
其中的row, col, ...必须是N的因式分解值,即维度值必须是N的因数(约数, 因子);如:
shape=5, newshape可取5,(1,5),(5,1),(1,1,5),(1,5,1),...
- 即不论newshape有几个维度, 其连乘积必须和shape相等;
shape=(2,4), 则len(shape)=8, 那么newshape=(3,-1)就是非法的
- 因为-1所在的第二维度值为8/3, 不是8的因数, 非整数;注意:
1. newshape为整数n时, 表示 1 维数组, n只能取len(shape)或-1, 其他数都是非法的;
2. newshape为整数元组(n[,m[,...]])时, 表示 2 维以上数组;
3. 特别地, newshape=(n,)表示 1 维数组, n 取len(shape)或-1;
4. newshape的任一维度值都可以是-1, 表示自动推断, 但最多只能有一个-1,这样numpy才能自动计算该维度值(因数);
5. -1通常用于不知道len(shape)的情况下, 生成限定维度数组, 如想让array变成只有一列,行数由numpy自动计算:(-1,1);
6. "1 维数组" 就是1行n列的一维数组, 纵向一列(n行1列)数组是二维数组, 基础概念不要搞错了:当数组中每个元素都只带有一个下标时,称这样的数组为一维数组;
7. np.reshape(array, newshape, order='C') 与 array.reshape(newshape,order='C') 等价, 但newshape为元组时, np.reshape(array,(n,m))合法, array.reshape((n,m))合法, array.reshape(n,m)也合法, np.reshape(array,n,m)非法!
"""import numpy as np# 定义数组 b
>>> b = np.arange(5)
array([0, 1, 2, 3, 4]) # 此时 b 是 1 维数组, shape = 5, len(shape) = 5# ---------- newshape取整数 -----------------
# 返回 1 维数组(以下8种表达方式等价)
>>> np.reshape(b,5)
>>> np.reshape(b,-1)
>>> np.reshape(b,(5,))
>>> np.reshape(b,(-1,))>>> b.reshape(5)
>>> b.reshape(5,)
>>> b.reshape(-1)
>>> b.reshape(-1,)
array([0, 1, 2, 3, 4]) # 一维数组# newshape 单值整数非法
>>> b.reshape(3)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: cannot reshape array of size 5 into shape (3,)
(无法将大小为5的数组重塑为(3,)的形状)# --------- newshape取整数元组 -----------------
# 单行数组, 一维, 特殊情况
>>> b.reshape((-1,)) # 等价于 b.reshape(-1,)
array([0, 1, 2, 3, 4])# 单行数组, 二维
>>> b.reshape(1,5)
>>> b.reshape(1,-1)
array([[0, 1, 2, 3, 4]])# newshape参数未带括号错误
>>> np.reshape(b,1,5)
Traceback (most recent call last):File "..numpy\core\fromnumeric.py", line 58, in _wrapfuncreturn bound(*args, **kwds)
TypeError: order must be str, not int (order 必须是字符串, 不能是整数)# 单列数组, 二维
>>> b.reshape(-1,1)
array([[0],[1],[2],[3],[4]])# 三维数组
>>> b.reshape(1,5,1)
array([[[0],[1],[2],[3],[4]]])
>>> b.reshape(1,1,5)
array([[[0, 1, 2, 3, 4]]])
>>> b.reshape(5,1,1)
array([[[0]],[[1]],[[2]],[[3]],[[4]]])# -1太多错误
>>> b.reshape(-1,-1,5)
Traceback (most recent call last):File "<stdin>", line 1, in <module>
ValueError: can only specify one unknown dimension (只能指定一个未知维度)
4. 如何理解 order = {‘C’, ‘F’, ‘A’} ?
"""数组索引和顺序C: C语言
F: Fortran语言
A: 数组索引和顺序在Fortran和C之间有所不同:
1. 索引C数组始终从零开始,但是默认情况下,Fortran数组从1开始2. 顺序Fortran数组以列优先顺序存储:A(3,2)A(1,1) A(2,1) A(3,1) A(1,2) A(2,2) A(3,2) A(1,3) A(2,3) A(3,3)C数组以行优先顺序存储: A[3][2]A[0][0] A[0][1] A[0][2] A[1][0] A[1][1] A[1][2] A[2][0] A[2][1] A[2][2]注意:
3. C 和 F 都只考虑索引顺序, 与数组元素在内存中的顺序无关;
4. A 基于数组元素在内存中的存储顺序, 行序存储用行序优先(等价C)读/写,列序存储用列序优先(等价F)读/写;
5. 若使用 array.reshape(newshape, order='C'), order 不可省略;
"""# 定义数组 a
>>> a = np.arange(6).reshape((3, 2))
array([[0, 1],[2, 3],[4, 5]])# order='C', 行优先读/写顺序,默认
>>> np.reshape(a, 6)
array([0, 1, 2, 3, 4, 5])
>>> np.reshape(a, (2, 3))
array([[0, 1, 2],[3, 4, 5]])# order='F', 列优先读/写顺序
>>> np.reshape(a, 6, order='F')
array([0, 2, 4, 1, 3, 5])
>>> np.reshape(a, (2, 3), order='F')
array([[0, 4, 3],[2, 1, 5]])# order='A', 基于存储视图读/写顺序
>>> np.reshape(a,6,order='A')
>>> np.reshape(a,6,'A')
array([0, 1, 2, 3, 4, 5])
>>> np.reshape(a,(2,3),order='A') # 结果说明a在内存中是行优先存储的
array([[0, 1, 2],[3, 4, 5]])>>> a.reshape(6,'A') # array.reshape方式下, 'order='不可缺省
Traceback (most recent call last):File "<stdin>", line 1, in <module>
TypeError: 'str' object cannot be interpreted as an integer
(字符串对象不能被解释为整数)
© 2021 Cherry_ChenNan
错漏之处不吝指正讨论.
点赞支持,收藏学习,关注不迷路~
【一文读懂】python 中的 numpy.reshape(a, newshape, order=‘C‘) 详细说明及实例讲解相关推荐
- 带你自学Python系列(九):一文读懂Python中字典应用原理!
↑ 点击上方[计算机视觉联盟]关注我们 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第9天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言.你和小编一起打卡了 ...
- python中的映射_一文读懂Python中的映射
python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...
- python输入什么就输出什么_一文读懂Python的输入和输出
本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...
- python读取枚举_一文读懂Python 枚举
enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...
- 一文读懂机器学习中的模型偏差
一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...
- java中date类型如何赋值_一文读懂java中的Reference和引用类型
简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...
- 一文读懂密码学中的证书
一文读懂密码学中的证书 之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认.但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送 ...
- 一文读懂Java中File类、字节流、字符流、转换流
一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...
- 一文读懂SpringBoot中的事件机制
一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...
- 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字
this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...
最新文章
- 【408预推免复习】计算机组成原理之存储器
- 02027_线程池练习:返回两个数相加的结果
- iOS点击推送消息跳到应用指定页面
- openfire(一):使用idea编译openfire4.2.3源码
- 异常的捕获 try...catch java
- 类和对象(2)—— 类的封装和访问控制
- C语言i++和++i的区别和用法
- 虚拟机搭建集群服务(1)——准备工作
- 以rpm包形式升级Linux驱动
- Packet Tracert 5.0 使用教程
- 连续亏损的哈啰,转型多元化困难重重
- 如何查询计算机主机序列号,计算机硬盘序列号如何查询
- 阿里云短信验证码接口
- 微服务Http健康检查
- 本文为转载-------Web常使用的功能经验笔记第1季 -转载自刘岩
- android 自定义字体 ttf,Android APP支持自定义字体
- zjhu1016密码锁
- Gentoo Linux KDE 下使用IBUS的问题
- BZOJ 2314 士兵的放置(play) 树形DP
- 腾讯云系统镜像和使用镜像创建云主机