如何利用reshape方法,重排ndarray的shape形状及维度?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
在平时的python
代码学习中,.reshape()
方法经常跟在.arange()
后面,但是它并不是一维等差数列的专属方法,而是所有的ndarray
变量都可以使用的。这就是本文要重点澄清的事情之一。
大家好,这里是苏南大叔的“程序如此灵动”博客,本文描述dataframe
类型变量,如何重新改变其形状。测试环境:win10
,python@3.11.0
,numpy@1.24.2
。任何维度的ndarray
都可以被.reshape()
。
准备一个数据
老生常谈,为了文章内容的正常展开,这里需要一个龙套角色,用于引出其.reshape()
方法。参考文章:
被重塑形状的ndarray
变量可以是任意形状任意维度的,都是可以被重塑的。理解上可以理解为先拆散重排为一维数组,然后再按照新的尺寸要求进行填充。
import numpy as np
sn = np.array([["苏", "南", "大", "叔", "博", "客"], ["su", "nan", "da", "shu", "bo", "ke"]])
print(sn)
print(sn.size, sn.ndim, sn.shape)
输出:
[['苏' '南' '大' '叔' '博' '客']
['su' 'nan' 'da' 'shu' 'bo' 'ke']]
12 2 (2, 6)
重塑为目标形状的基本原则
其实,这里隐藏了一个条件,就是新的维度信息的参数,相乘得到的乘积是原来的数组成员数量总和。可以打印一下ndarray
的相关信息来印证自己的猜想。
如果某个轴向上面的数量不一定,那么有个隐藏的参数-1
,设置为-1
就不那么为难了。
【重要的原则】是:重塑为几个维度,就填几个参数!!新多出的参数,就是新添加的概念!一维变二维增加的是行的概念,二维变三维增加的是通道(层)的概念!
重塑为一维数组
ndarray.reshape(数)
sn1 = sn.reshape(12) # 重塑为一维数组
print(sn1)
print(sn1.size, sn1.ndim, sn1.shape)
输出:
['苏' '南' '大' '叔' '博' '客' 'su' 'nan' 'da' 'shu' 'bo' 'ke']
12 1 (12,)
不定数量时:
sn1 = sn.reshape(-1) # 重塑为一维数组
print(sn1)
print(sn1.size, sn1.ndim, sn1.shape)
重塑为二维数组
ndarray.reshape(行数,列数)
sn2 = sn.reshape(1, 12) # 重塑为二维数组
print(sn2)
print(sn2.size, sn2.ndim, sn2.shape)
[['苏' '南' '大' '叔' '博' '客' 'su' 'nan' 'da' 'shu' 'bo' 'ke']]
12 2 (1, 12)
sn2 = sn.reshape(3, 4) # 重塑为二维数组
print(sn2)
print(sn2.size, sn2.ndim, sn2.shape)
[['苏' '南' '大' '叔']
['博' '客' 'su' 'nan']
['da' 'shu' 'bo' 'ke']]
12 2 (3, 4)
不定数量时:
sn2 = sn.reshape(1, -1) # 重塑为二维数组
print(sn2)
print(sn2.size, sn2.ndim, sn2.shape)
sn2 = sn.reshape(2, -1) # 重塑为二维数组
print(sn2)
print(sn2.size, sn2.ndim, sn2.shape)
sn2 = sn.reshape(3, -1) # 重塑为二维数组
print(sn2)
print(sn2.size, sn2.ndim, sn2.shape)
重塑为三维数组
ndarray.reshape(通道数,行数,列数)
sn3 = sn.reshape(2, 2, 3) # 重塑为三维数组
print(sn3)
print(sn3.size, sn3.ndim, sn3.shape)
[[['苏' '南' '大']
['叔' '博' '客']]
[['su' 'nan' 'da']
['shu' 'bo' 'ke']]]
12 3 (2, 2, 3)
sn3 = sn.reshape(3, 2, 2) # 重塑为三维数组
print(sn3)
print(sn3.size, sn3.ndim, sn3.shape)
[[['苏' '南']
['大' '叔']]
[['博' '客']
['su' 'nan']]
[['da' 'shu']
['bo' 'ke']]]
12 3 (3, 2, 2)
不定数量时:
sn3 = sn.reshape(-1, 3, 4) # 重塑为三维数组
print(sn3)
print(sn3.size, sn3.ndim, sn3.shape)
sn3 = sn.reshape(-1, 2, 2) # 重塑为三维数组
print(sn3)
print(sn3.size, sn3.ndim, sn3.shape)
结束语
更高维度的话,也支持,就是比较难理解了。所以,这里就不做描述了。放个文章链接,如果读者有需要,可以点击:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。