【Numpy】改变数组形状

Python学习 Day70 numpy数组操作 02 numpy数组操作 一、修改数组形状 1.reshape()方法 原型:reshape(shape, order='C') 作用:不改变数据的条件下修改形状 参数 说明 shape 形状 order ‘C’ – 按行,‘F’ – 按列,‘A’ – 原顺序,‘k’ – 元素在内存中的出现顺序 2.flat数组元素迭代器 3.flatten()方法 原型:flatten(order='C') 作用:展平的数组元素并拷贝一份,顺序通常是"C风格" 注意:修改返回的数组不会对原数组产生影 阅读详情

前言

本篇总结、介绍数组的基本操作之一——改变数组形状 [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
【Python Numpy】修改数组形状 NumPy(Numerical Python)是Python中用于处理数组和矩阵的重要库,它提供了丰富的功能,用于科学计算、数据分析和机器学习等领域。在NumPy中,数组形状的修改是一个常见的操作,它允许你重新组织或变换数组的维度和大小。本文将介绍NumPy数组形状的概念,以及如何使用NumPy提供的方法来改变数组的形状。在NumPy中,数组的形状(shape)指的是数组的维度和各个维度的大小。一个数组的形状决定了它包含的元素数量和如何排列这些元素。 阅读详情

相关推荐

Numpy-如何改变数组的形状

本文是该专栏的第22篇,后面会持续分享python的数据分析知识,记得关注。想要改变数组的形状,你脑海中想起的都有哪些方法呢?下面,笔者在本文中为你详细介绍改变数组形状最全面的几种方法,如下:reshape,resize,flatten,ravel。那么,这几种方法如何正确使用呢?这几种方法对于改变数组形状的区别,又有哪些?

Python进阶专栏《爬虫实战进阶》,《Pyppeteer从入门到精通》原创作者 722

改变numpy数组形状的7种常用方法

例如下图,给array2添加一个np.newaxis,就相当于新数组在np.newaxis位置的维度是1,另一个维度用原数组元素填充。如下图,对于shape是(5,2)的数组它完全没有修改,但是对于array2_1,array2_2,array2_3中,将维度为1的全部删掉了。不是函数,返回的是一个连接后的ndarray或者是一个矩阵。np.newaxis的功能就是增加新的维度,添加在不同的地方,则会在不同的地方增加维度。squeeze也可以展平数组,但是它比较特殊,它只能展平维度是1的部分。

youzi85的博客 4721

Gemini 3.1 Flash本地部署实操:Ollama+Open WebUI零门槛运行指南

大型语言模型(LLM)本地运行是指将模型权重下载至本地设备,通过推理引擎完成离线推理的过程;其核心原理依赖量化压缩(如GGUF格式)与轻量级运行时(如Ollama)实现CPU/GPU高效加载;技术价值在于低延迟响应、数据隐私可控及免网络依赖;典型应用场景包括办公提效(邮件/周报生成)、学生学习辅助、产品原型验证等边缘AI任务;本文聚焦Gemini 3.1 Flash这一面向消费级硬件优化的轻量模型变体,结合Ollama模型管理与Open WebUI图形界面,提供从环境准备、模型拉取到流式对话的完整新手实操路

weixin_32238157的博客 494

Numpy简易教程4——变换数组的形态

变换数组的形态 1. 改变数组的形状 在对数组进行操作时,经常要改变数组的维度。 在NumPy中,常用reshape函数改变数组的“形状”,也就是改变数组的维度。其参数为一个正整数元组,分别指定数组在每个维度上的大小。 reshape函数在改变原始数据的形状的同时不改变原始数据的值。 如果指定的维度和数组的元素数目不吻合,则函数将抛出异常。 案例:改变数组形状 # 创建一维数组 arr = np.arange(12) print('创建的一维数组为:',arr) # 设置数组的形状 print('新的一

mighty13的专栏 3万+

【数据攻略】字节面试真题(含答案)+100道面试题库

数据攻略

qq_40002713的博客 4104

Latex参考文献中大写字母编译后自动变成了小写,如何保持原字母大写形式

bib文件参考文献中大写自动变为小写,如何保持原大写问题。Latex: 保持参考文献大小写,overleaf文献编译后,原大写字母自动变成了小写字母,如何保持原字母大写

我的个人博客 5806

NumPy改变数组的形状——《Python数学函数库NumPy》

NumPy提供了多种灵活的方式来改变数组的形状,以满足不同的数据处理需求。通过掌握这些方法,我们可以更好地利用NumPy库进行数值计算和数据处理。在实际应用中,我们需要根据具体需求选择最适合的方法来改变数组的形状,并注意性能优化和数据保护的问题。通过合理使用这些形状变换方法,我们可以提高代码的效率、可读性和可维护性,从而更好地应对各种数据处理挑战。👨‍💻博主Python老吕评论,您的举手之劳将对我提供了无限的写作动力!🤞🔥《Python全栈工程师》《跟老吕学MySQL》

Python老吕的博客 1376

Unity3D移动平台简单实现

在电子游戏中移动平台可谓是十分常见的,如平台从一处至另一处的来回移动,或当需要玩家触发机关时,平台浮动并按一定的路线移动至目标处。本文主要是在Unity3D引擎下使用少量脚本实现两点之间来回移动平台的最基本功能,是一种比较简单且好理解的移动平台解决方案。 涉及到的点如下: 平台对象的实现 平台移动路线的设定 处于平台上游戏对象(如:玩家)的相对运动 创建平台控制对象 创建平台实...

长溪木可的博客 4683

numpy中改变数组形状

是 NumPy 中用于转置数组的函数,也就是说,它可以改变数组的轴的顺序。对于二维数组,它会交换行和列,而对于多维数组,它可以重新排列轴的顺序。方法用于移除数组形状中的单维度条目,即维数为1的维度。用于在指定位置插入一个新的轴来增加数组的维数。在这个例子中,原来的轴顺序是(0, 1, 2),可以在不改变数组数据的前提下改变数组的形状。可以改变数组的形状并且改变了原数组。用于移除多余的轴(维度为1的),而。表示第一个轴和第二个轴交换了位置。适用于改变数组的多维形状,而。是最常用的改变数组形状的方法。

sinat_34461199的博客 922

地图坐标系大全:常用地图坐标系详解与转换指南

地图坐标系是用于描述地图上位置的数学模型。它可以用来表示地球表面上的任意一个点,使得这个点的位置可以在地图上精确定位。不同的地图坐标系采用不同的基准面和投影方式,因此会有不同的坐标系参数,不同的坐标系之间也需要进行坐标转换。在地图制图、导航、GIS等领域中,地图坐标系是一个非常重要的概念。

weixin_39888010的博客 1万+

LVGL colorwheel组件教程一(调色板)

【代码】LVGL colorwheel组件教程一(调色板)

摸鱼专家 437

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

在机器学习以及深度学习的任务中,通常需要将处理好的数据以模型能接收的格式输入给模型,然后由模型通过一系列的运算,最终返回一个处理结果。然而,由于不同模型所接收的输入格式不一样,往往需要先对其进行一系列的变形和运算,从而将数据处理成符合模型要求的格式。在矩阵或者数组的运算中,经常会遇到需要把多个向量或矩阵按某轴方向合并,或展平(如在卷积或循环神经网络中,在全连接层之前,需要把矩阵展平)的情况。下面介...

weixin_39705435的博客 5735

uniapp [安卓苹果App端] - 实现获取请求手机位置权限+开启定位获取经纬度/省市区地址等,检测权限手机定位是否开启并引导用户同意授权,uniApp app端调用本机开启本机定位权限及IP属地

uni-app,手机定位权限,安卓Android,苹果ios,uniapp获取本机位置权限,uni-app获取用户定位数据,uniapp APP获取用户IP属地定位,判断权限,权限被拒绝了怎么办,苹果ios系统无法开启定位,获取定位权限报错,uniapp定位获取省市区,UNI-APP如何开启手机定位功能并获取经纬度,不依赖地图第三方插件组件,打包上架后如何获取,真机运行无法获取定位,安卓和ios权限获取,判断权限检查,正式打包,详细教程,根据获取当前经纬度,再根据经纬度去定位具体省市区,自定义基座打包能成功

🏆 前端领域优质创作者 1万+

NumPy 2.x 完全指南【十四】基础操作 & 改变数组形状

NumPy 提供了一系列的数组操作函数或方法,包括形状调整、元素增删、合并拆分、数学运算等,是数据科学、机器学习和科学计算中处理数值数据的核心工具。

记录知识、锤炼自我 1269

uniapp - 详细实现移动端公众号 H5 网页授权登录流程及示例代码,申请测试公众号全流程及本地调试无需部署上线服务器就能直接调起微信登陆授权页面,手机移动端h5公众号页面利用微登录拿到用户数据!

uni-app,微信公众号,h5网页,uniapp网页端,手机端H5公众号页面,微信网页登陆,uniApp详细实现公众号的登录,微信授权第三方网站登录,流程及逻辑详细教程,OAuth2.0,公众号网页授权,微信网页授权通过code换取网页授权,redirect_url,参数错误,解决,报错,无法调起,如何申请测试公众号,微信公众平台测试号的申请与使用,获取用户openid手机号昵称头像,利用测试号实现本地调试微信登录授权,本地无法调试怎么办,测试公众号,在开发环境下怎么测试,用项目本地ip地址,微信公众号平

🏆 前端领域优质创作者 5063

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

Numpy基础2(改变数组的形状(维度)、数组的组合和分割)

1 改变数组形状 # 创建一维数组 arr = np.arange(12) print("创建的一维数组arr为:",arr) 创建的一维数组arr为: [ 0 1 2 3 4 5 6 7 8 9 10 11] arr_new = arr.reshape(3,4) print("新的一维数组arr_new为:",arr_new) 新的一维数组arr_new为: [[ ...

yuanzhen1的博客 1403

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Numpy学习——数组形状的改变、拆分、整合

改变数组的形状 数组的形状可以改变,但是元素不可以改变。 在reshape()的操作中,如果某个方向的大小设置为-1,则会根据其他方向上设定的大小来计算-1这个方向的大小。 >>> a = np.range(24) >>> a.reshape([2,3,4]) array([[[ 0, 1, 2, 3], [ 4, 5, 6, 7], [ 8, 9, 10, 11]], [[12, 13, 14, 15],

m0_50470999的博客 714

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

matlab 改变数组形状,NumPy形状操作 更改数组的形状

形状操作更改数组的形状一个数组的形状由它每个轴上的元素个数给出:>>> a = floor(10*random.random((3,4)))>>> aarray([[ 7., 5., 9., 3.],[ 7., 2., 7., 8.],[ 6., 8., 3., 2.]])>>> a.shape(3, 4)一个数组的形状可以被...

weixin_42097208的博客 853

第二章4节-Numpy运用之数组形状改变

1、数组形状改变 Numpy中提供了reshape等方法改变数组的形状,但不改变数据的值 可以对数组转换为一维,即展平 可以将多个数组,组合成一个更大的数组 三维数组的创建和索引 (1).reshape()方法 1)改变形状,原数组不发生变化 arr.reshape(a,b)的参数中,只要其中一个参数是确定的,另一个参数就会自动计算出 2) 当改变形状的时候修改数组的值,原数组的形状没有变化,相对应的值会改变 (2).resize()方法 ...

weixin_45441862的博客 1761

matlab 改变数组形状,Numpy学习之更改数组形状

Numpy学习之更改数组形状更改数组形状的相关函数如下:x = np.array([1,2,3,4,5,6,7,8])print(x.shape) # 表示数组的维度,返回一个元组(8,)x = np.array([[11,12,13,14,15],[16,17,18,19,20],[21,22,23,24,25],[26,27,28,29,30],[31,32,33,34,35]])y = x....

weixin_27872611的博客 955

Numpy改变数组形状

Numpy; reshape();改变数组形状

qingmuluoyang的博客 170

1.3 Numpy的算术运算&&1.4 数组形状改变

1.3 Numpy的算术运算 有两种常用的运算,一种是对应元素相乘,又称为逐元乘法,运算符为np.multiply()或者*;另一种是点积或內积,运算符为np.dot(). 1.3.1 对应元素相乘 是指两个矩阵中对应元素相乘,输出与输入矩阵或数组的维度是一致的。 ...

qq_43655233的博客 302

改变数组形状(reshape、transpose)--numpy

改变数组形状(shape、transpose)--numpy

chongbaikaishi的博客 4233

(五)NumPy数组操作之改变数组形状

方法返回一个视图(view)或者拷贝(copy)的一维数组,如果原数组是多维的,返回的是一个与原数组共享数据的一维数组,该数组的修改会影响原数组。方法返回的是一个视图或者拷贝的数组,其不会分配额外的内存空间,而是与原数组共享数据,因此在对返回的数组进行修改时,会影响到原数组。方法返回的是一个视图或者拷贝的一维数组,其返回的数组会尽可能地保持和原数组的数据类型一致,但在某些情况下可能会返回一个新的数组。方法返回一个拷贝的一维数组,无论原数组是几维的,返回的都是一维数组。

Zuo_you_zx的博客 235

Numpy高级用法之:数组的形状改变

数组的形状改变 • Numpy中提供了reshape等方法改变数组的形状,但不改变数据的值 • 可以对数组转换为一维,即展平 • 可以将多个数组,组合成一个更大的数组 • 三维数组的创建和索引 arr.reshape(10,2) arr.flatten() np.hstack((arr1,arr2)) np.vstack((arr1,arr3)) ar = np.arange(8).reshape(2,2,2) 示例一:reshape 示例二:resize 示例三:ravel 示例四:fla

qq_43193797的博客 985
上一篇: 【Numpy】数组的创建
下一篇: 【Numpy】改变数组维数
大笨牛@
博客等级 码龄12年 313粉丝 46原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值