百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术资源 > 正文

用Python对numpy数组进行变形(python np数组)

off999 2024-11-06 11:22 39 浏览 0 评论

本教程和备忘单提供可视化帮助您了解numpy如何重塑多维数组。

numpy reshape()方法如何重整数组? 您是否感到困惑或难以理解其工作原理? 本教程将引导您逐步重塑numpy。 如果您需要上述备忘单的pdf副本,则可以在此处(https://github.com/hauselin/rtutorialsite/blob/master/_posts/2019-12-20-numpy-reshape/reshape.pdf)下载。

创建一个Python numpy数组

使用np.arange()生成一个numpy数组,其中包含从1到12的数字序列。请参见此处的文档。

import numpy as np
a1 = np.arange(1, 13)  # numbers 1 to 12
print(a1.shape)
> (12,)
print(a1)
> [ 1  2  3  4  5  6  7  8  9 10 11 12]


使用reshape()方法重塑

使用reshape()方法将a1数组整形为3 x 4维数组。 让我们使用3_4来表示它的尺寸:3是第0个尺寸(轴),4是第1个尺寸(轴)(请注意,Python索引从0开始)。 请参阅此处的文档。

a1_2d = a1.reshape(3, 4)  # 3_4
print(a1_2d.shape)
> (3, 4)
print(a1_2d)
> [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]


如果希望numpy自动确定特定尺寸应为多少尺寸/长度,请将该尺寸指定为-1。

a1.reshape(3, 4)
a1.reshape(-1, 4)  # same as above: a1.reshape(3, 4)
a1.reshape(3, 4)
a1.reshape(3, -1)  # same as above: a1.reshape(3, 4)
a1.reshape(2, 6)
a1.reshape(2, -1)  # same as above: a1.reshape(2, 6)


沿不同尺寸重塑

默认情况下,reshape()沿第0维(行)对数组进行整形。 可以通过命令参数更改此行为(默认值为" C")。 请参阅文档以获取更多信息。

a1.reshape(3, 4) # reshapes or ‘fills in’ row by row
a1.reshape(3, 4, order='C') # same results as above

通过将顺序更改为" F",我们可以沿第一维(列)重塑形状。 对于熟悉MATLAB的人,MATLAB使用此顺序。

a1.reshape(3, 4, order='F')  # reshapes column by column
> [[ 1  4  7 10]
   [ 2  5  8 11]
   [ 3  6  9 12]]

测试:阵列a1的尺寸/形状是什么?

a1是一维数组-仅具有1个维度,即使您可能认为其维度应为1_12(1行12列)。 要转换为1_12数组,请使用reshape()。

print(a1)  # what's the shape?
> [ 1  2  3  4  5  6  7  8  9 10 11 12]
print(a1.shape)
> (12,)
a1_1_by_12 = a1.reshape(1, -1)  # reshape to 1_12
print(a1_1_by_12)  # note the double square brackets!
> [[ 1  2  3  4  5  6  7  8  9 10 11 12]]
print(a1_1_by_12.shape)  # 1_12 array
> (1, 12)


使用ravel()展平/拖曳到一维数组

使用ravel()方法可以将多维数组转换为一维数组(请参见此处的文档)。 我们的2D数组(3_4)将被展平或拉平,使其成为具有12个元素的1D数组。

如果您未指定任何参数,则ravel()将沿行(第0维/轴)展平/散列我们的2D数组。 即,第0行[1、2、3、4] +第1行[5、6、7、8] +第2行[9、10、11、12]。

如果要沿列(第1维)展平/滚动,请使用order参数。

print(a1_2d)  # 3_4
> [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
print(a1_2d.ravel())  # ravel by row (default order='C')
> [ 1  2  3  4  5  6  7  8  9 10 11 12]
print(a1_2d.ravel(order='F'))  # ravel by column
> [ 1  5  9  2  6 10  3  7 11  4  8 12]

使用np.stack()和np.hstack()连接/堆栈数组

创建两个一维数组

a1 = np.arange(1, 13)
print(a1)
> [ 1  2  3  4  5  6  7  8  9 10 11 12]
a2 = np.arange(13, 25)
print(a2)
> [13 14 15 16 17 18 19 20 21 22 23 24]


使用np.stack()连接/堆栈数组。 默认情况下,np.stack()沿第0维(行)(参数轴= 0)堆叠数组。 有关更多信息,请参阅文档。

stack0 = np.stack((a1, a1, a2, a2))  # default stack along 0th axis
print(stack0.shape)
> (4, 12)
print(stack0)
> [[ 1  2  3  4  5  6  7  8  9 10 11 12]
   [ 1  2  3  4  5  6  7  8  9 10 11 12]
   [13 14 15 16 17 18 19 20 21 22 23 24]
   [13 14 15 16 17 18 19 20 21 22 23 24]]


沿第一维堆叠(Axis= 1)

stack1 = np.stack((a1, a1, a2, a2), axis=1)
print(stack1.shape)
> (12, 4)
print(stack1)
> [[ 1  1 13 13]
   [ 2  2 14 14]
   [ 3  3 15 15]
   [ 4  4 16 16]
   [ 5  5 17 17]
   [ 6  6 18 18]
   [ 7  7 19 19]
   [ 8  8 20 20]
   [ 9  9 21 21]
   [10 10 22 22]
   [11 11 23 23]
   [12 12 24 24]]


用np.hstack()连接为长的一维数组(水平堆栈)

stack_long = np.hstack((a1, a2))
print(stack_long.shape)
> (24,)
print(stack_long)
> [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]

创建多维数组(3D)

多维数组非常常见,称为张量。 它们在深度学习和神经网络中使用很多。 如果您要进行深度学习,则将定期重整张量或多维数组。

首先,我们创建两个不同的3 x 4数组。 稍后,我们将它们组合成一个3D阵列。

a1 = np.arange(1, 13).reshape(3, -1)  # 3_4
a2 = np.arange(13, 25).reshape(3, -1)  # 3_4
print(a1)
> [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
print(a2)
> [[13 14 15 16]
   [17 18 19 20]
   [21 22 23 24]]


通过沿不同的轴/维度堆叠数组来创建3D数组

a3_0 = np.stack((a1, a2))  # default axis=0 (dimension 0)
a3_1 = np.stack((a1, a2), axis=1)  # along dimension 1
a3_2 = np.stack((a1, a2), axis=2)  # along dimension 2
print(a3_0.shape)
> (2, 3, 4)
print(a3_1.shape)
> (3, 2, 4)
print(a3_2.shape)
> (3, 4, 2)


让我们打印数组以查看它们的外观。 有关可视化的信息,请参见上图。

print(a3_0)
> [[[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]

   [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]]
print(a3_1)
> [[[ 1  2  3  4]
    [13 14 15 16]]

   [[ 5  6  7  8]
    [17 18 19 20]]

   [[ 9 10 11 12]
    [21 22 23 24]]]
print(a3_2)
> [[[ 1 13]
    [ 2 14]
    [ 3 15]
    [ 4 16]]

   [[ 5 17]
    [ 6 18]
    [ 7 19]
    [ 8 20]]

   [[ 9 21]
    [10 22]
    [11 23]
    [12 24]]]


由于这三个3D数组是通过沿不同维度堆叠两个数组而创建的,因此,如果我们要从这些3D数组中检索原始的两个数组,则必须沿正确的维度/轴进行子集化。

测试:我们如何从这些3D数组中检索a1数组?

print(a1)  # check what's a1
> [[ 1  2  3  4]
   [ 5  6  7  8]
   [ 9 10 11 12]]
# solutions
a3_0[0, :, :]
a3_0[0]  # same as above
a3_1[:, 0, :]
a3_2[:, :, 0]


展平多维数组

我们还可以使用ravel()展平多维数组。 下面,我们逐行浏览(默认顺序为" C")到一维数组。

print(a3_0)
> [[[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]

   [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]]
print(a3_0.ravel())
> [ 1  2  3  4  5  6  7  8  9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24]

逐列划定(order ='F')到一维数组

print(a3_0.ravel(order='F'))
> [ 1 13  5 17  9 21  2 14  6 18 10 22  3 15  7 19 11 23  4 16  8 20 12 24]

重塑多维数组

我们还可以使用reshape()重塑多维数组。

# reshape row by row (default order=C) to 2D array
print(a3_0)  # 2_3_4
> [[[ 1  2  3  4]
    [ 5  6  7  8]
    [ 9 10 11 12]]

   [[13 14 15 16]
    [17 18 19 20]
    [21 22 23 24]]]
print(a3_0.reshape(4, -1))  # reshape to 4_6 (row by row)
> [[ 1  2  3  4  5  6]
   [ 7  8  9 10 11 12]
   [13 14 15 16 17 18]
   [19 20 21 22 23 24]]
print(a3_0.reshape(4, -1, order='F'))  # reshape (column by column)
> [[ 1  9  6  3 11  8]
   [13 21 18 15 23 20]
   [ 5  2 10  7  4 12]
   [17 14 22 19 16 24]]
print(a3_0.reshape(4, 2, 3))  # reshape to 4_2_3 (row by row)
> [[[ 1  2  3]
    [ 4  5  6]]
   [[ 7  8  9]
    [10 11 12]]
   [[13 14 15]
    [16 17 18]]
   [[19 20 21]
    [22 23 24]]]

结束语

我希望您现在对numpy如何重塑多维数组有了更好的了解。 我期待您的想法和评论。 另外,请查看有关numpy和数据表示的直观介绍。


(本文翻译自Hause的文章《Reshaping numpy arrays in Python — a step-by-step pictorial tutorial》,参考:https://towardsdatascience.com/reshaping-numpy-arrays-in-python-a-step-by-step-pictorial-tutorial-aed5f471cf0b)

相关推荐

安全教育登录入口平台(安全教育登录入口平台官网)

122交通安全教育怎么登录:122交通网的注册方法是首先登录网址http://www.122.cn/,接着打开网页后,点击右上角的“个人登录”;其次进入邮箱注册,然后进入到注册页面,输入相关信息即可完...

大鱼吃小鱼经典版(大鱼吃小鱼经典版(经典版)官方版)

大鱼吃小鱼小鱼吃虾是于谦跟郭麒麟的《我的棒儿呢?》郭德纲说于思洋郭麒麟作诗的相声,最后郭麒麟做了一首,师傅躺在师母身上大鱼吃小鱼小鱼吃虾虾吃水水落石出师傅压师娘师娘压床床压地地动山摇。...

谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
  • 谷歌地球下载高清卫星地图(谷歌地球地图下载器)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)
哪个软件可以免费pdf转ppt(免费的pdf转ppt软件哪个好)

要想将ppt免费转换为pdf的话,我们建议大家可以下一个那个wps,如果你是会员的话,可以注册为会员,这样的话,在wps里面的话,就可以免费将ppt呢转换为pdfpdf之后呢,我们就可以直接使用,不需要去直接不需要去另外保存,为什么格式转...

2026-02-04 09:03 off999

电信宽带测速官网入口(电信宽带测速官网入口app)

这个网站看看http://www.swok.cn/pcindex.jsp1.登录中国电信网上营业厅,宽带光纤,贴心服务,宽带测速2.下载第三方软件,如360等。进行在线测速进行宽带测速时,尽...

植物大战僵尸95版手机下载(植物大战僵尸95 版下载)

1可以在应用商店或者游戏平台上下载植物大战僵尸95版手机游戏。2下载教程:打开应用商店或者游戏平台,搜索“植物大战僵尸95版”,找到游戏后点击下载按钮,等待下载完成即可安装并开始游戏。3注意:确...

免费下载ppt成品的网站(ppt成品免费下载的网站有哪些)

1、Chuangkit(chuangkit.com)直达地址:chuangkit.com2、Woodo幻灯片(woodo.cn)直达链接:woodo.cn3、OfficePlus(officeplu...

2025世界杯赛程表(2025世界杯在哪个国家)

2022年卡塔尔世界杯赛程公布,全部比赛在卡塔尔境内8座球场举行,2022年,决赛阶段球队全部确定。揭幕战于当地时间11月20日19时进行,由东道主卡塔尔对阵厄瓜多尔,决赛于当地时间12月18日...

下载搜狐视频电视剧(搜狐电视剧下载安装)

搜狐视频APP下载好的视频想要导出到手机相册里方法如下1、打开手机搜狐视频软件,进入搜狐视频后我们点击右上角的“查找”,找到自已喜欢的视频。2、在“浏览器页面搜索”窗口中,输入要下载的视频的名称,然后...

pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
  • pubg免费下载入口(pubg下载入口官方正版)
永久免费听歌网站(丫丫音乐网)

可以到《我爱音乐网》《好听音乐网》《一听音乐网》《YYMP3音乐网》还可以到《九天音乐网》永久免费听歌软件有酷狗音乐和天猫精灵,以前要跳舞经常要下载舞曲,我从QQ上找不到舞曲下载就从酷狗音乐上找,大多...

音乐格式转换mp3软件(音乐格式转换器免费版)

有两种方法:方法一在手机上操作:1、进入手机中的文件管理。2、在其中选择“音乐”,将显示出手机中的全部音乐。3、点击“全选”,选中所有音乐文件。4、点击屏幕右下方的省略号图标,在弹出菜单中选择“...

电子书txt下载(免费的最全的小说阅读器)

1.Z-library里面收录了近千万本电子书籍,需求量大。2.苦瓜书盘没有广告,不需要账号注册,使用起来非常简单,直接搜索预览下载即可。3.鸠摩搜书整体风格简洁清晰,书籍资源丰富。4.亚马逊图书书籍...

最好免费观看高清电影(播放免费的最好看的电影)

在目前的网上选择中,IMDb(互联网电影数据库)被认为是最全的电影网站之一。这个网站提供了各种类型的电影和电视节目的海量信息,包括剧情介绍、演员表、评价、评论等。其还提供了有关电影制作背后的详细信息,...

孤单枪手2简体中文版(孤单枪手2简体中文版官方下载)

要将《孤胆枪手2》游戏的征兵秘籍切换为中文,您可以按照以下步骤进行操作:首先,打开游戏设置选项,通常可以在游戏主菜单或游戏内部找到。然后,寻找语言选项或界面选项,点击进入。在语言选项中,选择中文作为游...

取消回复欢迎 发表评论: