文章目录

  • 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‘) 详细说明及实例讲解相关推荐

  1. 带你自学Python系列(九):一文读懂Python中字典应用原理!

    ↑ 点击上方[计算机视觉联盟]关注我们 今天是小编持续更新关于Python的知识总结以及Python实践项目应用的第9天,带你利用零碎时间自学最受欢迎的编程语言之一Python语言.你和小编一起打卡了 ...

  2. python中的映射_一文读懂Python中的映射

    python中的反射功能是由以下四个内置函数提供:hasattr.getattr.setattr.delattr,改四个函数分别用于对对象内部执行:检查是否含有某成员.获取成员.设置成员.删除成员. ...

  3. python输入什么就输出什么_一文读懂Python的输入和输出

    本文介绍了Python的输入和输出,既然是Python代码,那么就一定有输出量,那么,Python是如何输出的呢? 输出 用print()在括号中加上字符串,就可以向屏幕上输出指定的文字.比如输出'h ...

  4. python读取枚举_一文读懂Python 枚举

    enum是一组绑定到唯一常数值的符号名称,并且具备可迭代性和可比较性的特性.我们可以使用 enum 创建具有良好定义的标识符,而不是直接使用魔法字符串或整数,也便于开发工程师的代码维护. 创建枚举 我 ...

  5. 一文读懂机器学习中的模型偏差

    一文读懂机器学习中的模型偏差 http://blog.sina.com.cn/s/blog_cfa68e330102yz2c.html 在人工智能(AI)和机器学习(ML)领域,将预测模型参与决策过程 ...

  6. java中date类型如何赋值_一文读懂java中的Reference和引用类型

    简介 java中有值类型也有引用类型,引用类型一般是针对于java中对象来说的,今天介绍一下java中的引用类型.java为引用类型专门定义了一个类叫做Reference.Reference是跟jav ...

  7. 一文读懂密码学中的证书

    一文读懂密码学中的证书 之前的文章中,我们讲到了数字签名,数字签名的作用就是防止篡改和伪装,并且能够防止否认.但是要正确运用数字签名技术还有一个非常大的前提,那就是用来验证签名的公钥必须真正的属于发送 ...

  8. 一文读懂Java中File类、字节流、字符流、转换流

    一文读懂Java中File类.字节流.字符流.转换流 第一章 递归:File类: 1.1:概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. ...

  9. 一文读懂SpringBoot中的事件机制

    一文读懂SpringBoot中的事件机制?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法. 要"监听"事件,我们总是 ...

  10. 前端面试必会 | 一文读懂 JavaScript 中的 this 关键字

    this 是一个令无数 JavaScript 编程者又爱又恨的知识点.它的重要性毋庸置疑,然而真正想掌握它却并非易事.希望本文可以帮助大家理解 this. JavaScript 中的 this Jav ...

最新文章

  1. 【408预推免复习】计算机组成原理之存储器
  2. 02027_线程池练习:返回两个数相加的结果
  3. iOS点击推送消息跳到应用指定页面
  4. openfire(一):使用idea编译openfire4.2.3源码
  5. 异常的捕获 try...catch java
  6. 类和对象(2)—— 类的封装和访问控制
  7. C语言i++和++i的区别和用法
  8. 虚拟机搭建集群服务(1)——准备工作
  9. 以rpm包形式升级Linux驱动
  10. Packet Tracert 5.0 使用教程
  11. 连续亏损的哈啰,转型多元化困难重重
  12. 如何查询计算机主机序列号,计算机硬盘序列号如何查询
  13. 阿里云短信验证码接口
  14. 微服务Http健康检查
  15. 本文为转载-------Web常使用的功能经验笔记第1季 -转载自刘岩
  16. android 自定义字体 ttf,Android APP支持自定义字体
  17. zjhu1016密码锁
  18. Gentoo Linux KDE 下使用IBUS的问题
  19. BZOJ 2314 士兵的放置(play) 树形DP
  20. 腾讯云系统镜像和使用镜像创建云主机

热门文章

  1. 如何使用xbrowser图形化连接centos
  2. U盘格式化的不同选择——FAT32,NTFS和exFAT
  3. 1.DingoApi安装和配置
  4. 推荐一款强大的在线编译器
  5. 1U - 4.445厘米
  6. 直播平台多人连麦技术介绍
  7. 如何学习平面设计,需要学习哪些软件?
  8. 不仅会编程还要会英语(博主英语小笔记)1.1名词
  9. 3 linux禁用ssl_linux – Poodle:在服务器上禁用SSL V3真的是一个解决方案吗?
  10. Django Views: Dynamic Content