文章目录

  • 前言
  • 1. reshape
  • 2. ravel
  • 3. ndarray.flatten
  • Reference

前言

本篇总结、介绍数组的基本操作之一——改变数组形状 [1]。

1. reshape

numpy.reshape(a, newshape, order=‘C’):在不改变数据的情况下为数组赋予新的形状

  • a:类数组array_like)。待重塑数组
  • newshape:整数(一维数组)或者整数列表/元组(高维数组)等。重塑之后的数组形状(shape)。需要注意的是重塑之后的数组形状要与待重塑数组的形状相容
  • order:{‘C’, ‘F’, ‘A’},可选参数。数据在计算机内存中的存储顺序
>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])
## 打印arr1形状
>>> arr1.shape
(8,)# 将arr1变换为二维数组
>>> arr2 = np.reshape(arr1,(2,4))
>>> arr2
array([[0, 1, 2, 3],[4, 5, 6, 7]])
## 打印arr2形状
>>> arr2.shape
(2, 4)# 将arr1变换为三维数组
>>> arr3 = np.reshape(arr1,(2,2,2))
>>> arr3
array([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])
## 打印arr3形状
>>> arr3.shape
(2, 2, 2)# 将arr3转换为一维数组
>>> arr4 = np.reshape(arr3,8)
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
## 打印arr4形状
>>> arr4.shape
(8,)# 重塑之后的数组形状要与待重塑数组的形状相容,否则报错
>>> arr5 = np.reshape(arr1,(3,3))
ValueError: cannot reshape array of size 8 into shape (3,3)

注释:
newshape参数的其中一维可以是-1,表示该维度上的长度会自动根据数组的长度及其余维度的长度自动推断出来

我们看一下下面的例子:

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr2 = np.reshape(arr1,(2,-1))
>>> arr2
array([[0, 1, 2, 3],[4, 5, 6, 7]])

只能其中一维为-1:

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr2 = np.reshape(arr1,(2,-1,-1))
ValueError: can only specify one unknown dimension

另外,需要注意numpy.reshape(a,(1,-1))与numpy.reshape(a,(-1,1))以及numpy.reshape(a,-1)的区别

>>> arr1 = np.arange(8)
>>> arr1
array([0, 1, 2, 3, 4, 5, 6, 7])# numpy.reshape(a,(1,-1))
>>> arr2 = np.reshape(arr1,(1,-1))
>>> arr2
array([[0, 1, 2, 3, 4, 5, 6, 7]])
>>> arr2.shape
(1, 8)# numpy.reshape(a,(-1,1))
>>> arr3 = np.reshape(arr1,(-1,1))
>>> arr3
array([[0],[1],[2],[3],[4],[5],[6],[7]])
>>> arr3.shape
(8, 1)# numpy.reshape(a,-1)
>>> arr4 = np.reshape(arr3,-1)
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr4.shape
(8,)


注释:
每个Numpy数组(ndarray)的实例也都有自己的reshape方法(注意与函数reshape区别),其语法如下:

a.reshape(shape, order=‘C’):在不改变数据的情况下为数组赋予新的形状(a为Numpy数组实例)

无论从语法还是功能上来说,Numpy数组的reshape方法和Numpy的reshape函数都一样。两者的主要区别在于,(1)Numpy的reshape函数可以直接对诸如python列表对象进行操作(但返回的依然是Numpy ndarray对象),而Numpy数组的reshape方法则不行。(2)Numpy数组的reshape方法支持形状(shape)参数的每个元素作为单独的参数传入,而Numpy的reshape函数不行。

我们先来看一下第一点:

# numpy.reshape函数
>>> list1 = [0,1,2,3,4,5,6,7,8]
>>> arr1 = np.reshape(list1,(3,3))
>>> arr1
array([[0, 1, 2],[3, 4, 5],[6, 7, 8]])# ndarray.reshape方法
>>> list1.reshape(list1,(3,3))
AttributeError: 'list' object has no attribute 'reshape'

我们再来看一下第二点:

# numpy.reshape函数
## 形状参数作为一个整体传入
>>> arr1 = np.arange(8)
>>> np.reshape(arr1,(2,4))
array([[0, 1, 2, 3],[4, 5, 6, 7]])## 形状参数单独分开传入
>>> np.reshape(arr1,2,4)
TypeError: order must be str, not int
# ndarray.reshape方法
## 形状参数作为一个整体传入
>>> arr1 = np.arange(8)
>>> arr1.reshape((2,4))
array([[0, 1, 2, 3],[4, 5, 6, 7]])## 形状参数的元素单独传入
>>> arr1.reshape(2,4)
array([[0, 1, 2, 3],[4, 5, 6, 7]])


注释:
numpy.reshape和ndarray.reshape都不会改变原数组的形状


2. ravel

numpy.ravel(a, order=‘C’):返回展平成一维的数组元素。一般返回的是数组视图(view),需要的时候(例如order改变)才会返回数组的副本(copy) [2]

  • a:类数组
  • order:{‘C’,’F’, ‘A’, ‘K’},可选参数

注释:
numpy.ravel和ndarray.ravel以及ndarray.reshape(-1)等同。


>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])>>> np.ravel(arr1)
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr1.ravel()
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr1.reshape(-1)
array([0, 1, 2, 3, 4, 5, 6, 7])

3. ndarray.flatten

ndarray.flatten(order=‘C’):返回坍塌成一维的数组的副本

  • order:{‘C’, ‘F’, ‘A’, ‘K’},可选参数
>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])>>> arr1.flatten()
array([0, 1, 2, 3, 4, 5, 6, 7])

注释:
有关ravel和ndarray.flatten的区别和联系:

  • numpy.ravel、ndarray.ravel、ndarray.reshape(-1)以及ndarray.flatten都可以返回展平成一维的数组元素
  • numpy.ravel、ndarray.ravel、ndarray.reshape(-1)返回的是数组的视图,而ndarray.flatten返回的是数组的副本
>>> arr1 = np.arange(8).reshape(2,2,2)
>>> arr1
array([[[0, 1],[2, 3]],[[4, 5],[6, 7]]])>>> arr2 = arr1.reshape(-1)
>>> arr2
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr3 = arr1.ravel()
>>> arr3
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr4 = arr1.flatten()
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])>>> arr5 = arr1.ravel(order='F')
>>> arr5
array([0, 4, 2, 6, 1, 5, 3, 7])>>> arr1[0][0][1] = -1# arr1改变后
>>> arr1
array([[[ 0, -1],[ 2,  3]],[[ 4,  5],[ 6,  7]]])
>>> arr2
array([ 0, -1,  2,  3,  4,  5,  6,  7])
>>> arr3
array([ 0, -1,  2,  3,  4,  5,  6,  7])
>>> arr4
array([0, 1, 2, 3, 4, 5, 6, 7])
>>> arr5
array([0, 4, 2, 6, 1, 5, 3, 7])

Reference

[1]: https://numpy.org/doc/stable/reference/routines.array-manipulation.html [2]: https://www.runoob.com/numpy/numpy-copies-and-views.html

【Numpy】改变数组形状相关推荐

  1. python改变数组形状_NumPy数组的变形(改变数组形状)

    在机器学习以及深度学习的任务中,通常需要将处理好的数据以模型能接收的格式输入给模型,然后由模型通过一系列的运算,最终返回一个处理结果.然而,由于不同模型所接收的输入格式不一样,往往需要先对其进行一系列 ...

  2. 基于NumPy的数组重塑与转置

    这次主要是利用Python的:NumPy NumPy是引入了数组:数组是一些相同类型的数据的集合. 这些数据按照一定的顺序排列,每个数据占用大小相同的存储空间 数组的重塑是指更改数组的形状,将一个维度 ...

  3. python中numpy数组形状和计算

    1. numpy数组形状 数组可以理解为是矩阵,所以会涉及几行几列 import numpy as np import randomt1 = np.array([[1,2,3],[4,5,6]]) p ...

  4. 【Numpy】改变数组维数

    文章目录 前言 1. atleast_1d.atleast_2d.atleast_3d 2. broadcast 3. broadcast_to 4. broadcast_arrays 5. expa ...

  5. 如何查看numpy库数组的:类型、数据类型、尺寸、形状、维度? (type、dtype、size、shape、ndim)

    import numpy as np a1 = np.array([1,2,3,4],dtype=np.complex128) print("a1:",a1) print(&quo ...

  6. B10_NumPy数组操作、修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

    NumPy数组操作 Numpy 中包含了一些函数用于处理数组,大概可分为以下几类: 修改数组形状 翻转数组 修改数组维度 连接数组 分割数组 数组元素的添加与删除 修改数组形状 函数 描述 resha ...

  7. python3-numpy 数组操作--修改数组形状、翻转数组、修改数组维度、连接数组、分割数组、数组元素的添加与删除

    1.修改数组形状 函数 描述 reshape 不改变数据的条件下修改形状 flat 数组元素迭代器 flatten 返回一份数组拷贝,对拷贝所做的修改不会影响原始数组 ravel 返回展开数组 1.1 ...

  8. python数组去重函数_Python科学计算库Numpy之 数组操作

    操作ndarray 的方法 numpy.reshape:这个函数在不改变数据的条件下修改形状 numpy.ndarray.flat:该函数返回数组上的一维迭代器,行为类似 Python 内建的迭代器 ...

  9. python数据分析 - numpy | ndarray数组 | numpy常用函数

    文章目录 数据分析 numpy概述 numpy历史 numpy的核心:多维数组 numpy基础 ndarray数组 内存中的ndarray对象 ndarray数组对象的特点 ndarray数组对象的创 ...

最新文章

  1. boost::hana::monadic_fold_right用法的测试程序
  2. mysql锁与性能_MySQL性能优化--锁(概念)
  3. AVS解码器在DSP平台上的优化
  4. github 打不开_App更新不了? TF打不开? 试试这个
  5. html如何实现字体逐个输入,HTML – 如何将字体真棒图标插入文本输入?
  6. 小学计算机基础知识思维导图,思维导图在小学信息技术教学中的初步应用
  7. 用粉红噪声煲机_解析什么是白噪和粉噪?耳机煲机用白噪好还是粉噪
  8. CPU性能的三大主要参数
  9. 试喷一下今年的国家最高科学技术奖
  10. ROC曲线、AUC、Gini系数和KS值
  11. linux: It seems that scikit-learn has not been built correctly.
  12. Bootstrap3 按钮状态切换
  13. 小红书榜单,五大行业图文笔记类
  14. 关于微星主板官网下载网卡驱动后,网络适配器消失的问题
  15. 细菌如何交流和占地盘——细菌的群体感应和生物膜
  16. MBA-day25 最值问题-应用题
  17. 广州市劳动保障总集成项目1.06亿
  18. 工业蒸汽量预测-特征工程
  19. 2007高校bbs上20个睿智冷笑话
  20. 小米笔记本适合计算机专业吗,小米电脑笔记本好吗应该选哪个,小米入手使用感受...

热门文章

  1. Android aab的打包、调试、安装
  2. 48张帮助程序员梳理知识框架结构图谱
  3. 江西专升本考试作弊事件,为什么最近考试作弊事件频发?
  4. 从“一云多芯”支持,看多元算力的全栈云方案
  5. 【渗透工具】浏览器数据导出工具
  6. 如何优化网站,网站推广优化一般流程有哪些
  7. 2、安装VisualStudio、Unity3D、下载MRTK
  8. Nginx sendfile作用
  9. Mysql utf8mb3 utf8mb4 与UTF8 字符集参数(character_set_system)的说明
  10. 2018以太坊技术及应用大会圆满成功,V神等24位大咖观点集锦