Numpy改变数组维度的几种方法小结
本文详细介绍Numpy中改变数组维度的五种常用方法。通过reshape、ravel、flatten、直接设置shape属性以及transpose和resize函数,实现多维数组的重塑、展平与转置。重点解析ravel与flatten在内存占用上的差异,以及reshape与resize在是否直接修改原数组方面的不同行为,帮助开发者根据实际需求选择合适的方法。
本节内容源自《Python数据分析基础教程:Numpy 学习指南(第2版)》。
在Numpy中,改变数组维度的操作主要包含以下几种方式:
reshape() ravel() flatten()
接下来将逐一介绍如何利用元组来设定数组维度。
transpose() resize()
首先,我们需要构建一个多维数组作为示例基础。
具体实现代码如下:
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]
第一种方法是使用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间房间的结构。
第二种方法是使用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]
第三种方法是使用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]
第四种方法是通过元组直接设置数组维度。
这种方法允许用户直接传入一个正整数元组来定义数组的新形状。
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]]
第五种方法是使用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]]
第六种方法是使用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]]
此外,必须注意resize函数的返回值特性,它无法通过赋值语句直接获取结果,如下例所示:
e = b.resize((2,12)) print(e)
此时变量的结果为:
None
以上即为Numpy中改变数组维度的几种核心方法总结,希望能为读者提供有效的参考。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













