原来python中多维数组的拼接这么简单

        今天讲解一下Python中多维数组拼接的问题,即对于3维,4维和更高维度的张量(也可以叫多维数组,在计算机这里没有太大区别),他们在拼接时每个维度是怎么对应的,结果如何,有没有什么规律。

        首先我们看看2维向量是怎样的

1. 第一步,我们创建2个维向量并查看其形状

2.第二步,在第一个维度拼接

        可以看到第一个维度变成了2+2=4,且就是在行方向进行堆叠

3.第三步,在第二个维度拼接

         可以看到,第二个维度变成了3+3=6,且就是在列方向进行增加。

        到这里我们可以发现2维向量就是行和列的拼接,很好理解。

              然后我们以3维张量举例。

1.第一步,我们创建2个3维向量并查看其形状
# 创建2个3维张量
x = torch.arange(12, dtype=torch.float32).reshape((2,2,3))
y = torch.tensor([[[1,2,3,],[4,5,6,]],[[7,8,9],[10,11,12]]])
x, y

# 查看他们的形状
print(x.shape, y.shape)

 可以发现形状都是一样的,按照我之前文章的讲解,都是2个2维张量,每个2维张量有2个1维张量,每个1维张量中有3个数值。

2.第二步我们对这两个向量在第一个维度上进行拼接并查看其形状。
# 从第一个维度进行拼接
torch.cat((x, y), dim=0)

# 第一个维度拼接后的形状
torch.cat((x, y), dim=0).shape

可以发现,拼接后得到的新的张量的第一个维度变成了2+2=4了!后面两个维度没有发生变化,这也就说明这一新的张量是由4个2维向量组成,每个2维向量中有2个1维向量,每个1维向量中有3个元素。

看到这里已经可以发现其中的确是存在一些规律的,下面我们对从另外2个维度进行拼接看看。

3.第三步,对两个向量在第2个维度进行拼接并查看形状
# 从第二个维度进行拼接
torch.cat((x, y), dim=1)

# 第二个维度拼接后的形状
torch.cat((x, y), dim=1).shape

 可以看到,第二个维度的值变成了2+2=4!说明这一新的张量是由2个2维向量组成,每个2维向量中有4个1维向量,每个1维向量中有3个元素。此外,我们还发现,这其实和2维向量拼接时一样的,即一行一行的堆叠起来。

4.第四步,对两个向量在第3个维度进行拼接并查看形状
# 从第三个维度进行拼接
torch.cat((x, y), dim=2)

# 第三个维度拼接后的形状
torch.cat((x, y), dim=2).shape

  可以看到,第三个维度的值变成了3+3=6!说明这一新的张量是由2个2维向量组成,每个2维向量中有4个1维向量,每个1维向量中有6个元素。此外,我们还发现,这其实和2维向量拼接时一样的,即一列一列的堆叠起来。

        到这里我们就可以进行规律的总结了

1.对于2维向量,第一个维度是行,第二个维度是列

2.对于3维向量,第一个维度的拼接就是增加2维向量的个数,第二个维度的拼接就是增加1维向量的个数,而第三个维度的拼接就是增加1维向量中数值的个数。

3.对于4维向量,第一个维度的拼接就是增加3维向量的个数,第二个维度的拼接就是增加2维向量的个数,第三个维度的拼接就是增加1维向量的个数,而第四个维度的拼接就是增加1维向量中数值的个数。

4.再往下增加维度就是不断地套娃了,但是有个规律是不变的,就是最后两个维度始终是行和列。前面再多的维度,都只是增加比它低一维度的向量的个数(5维向量在第1个维度拼接是增加4维向量的个数,在第2个维度拼接是增加3维向量的个数······)

5.所以,只需要搞清楚最后2个维度,即行和列即可

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Python,我们可以使用NumPy库来进行数组拼接。NumPy提供了多种方法来进行数组拼接,包括append、concatenate、stack、hstack、vstack等方法。其,append方法可以用来将一个数组或一个数值追加到另一个数组的末尾,返回的结果始终是一个一维数组。concatenate方法可以在指定的轴上连接两个或多个数组,返回的结果可以是一维或多维数组。stack方法可以将多个数组沿着新的轴堆叠起来,返回的结果是一个新的多维数组。hstack方法可以水平堆叠两个数组,即将两个数组的列连接起来,返回的结果是一个新的二维数组。vstack方法可以垂直堆叠两个数组,即将两个数组的行连接起来,返回的结果是一个新的二维数组。总结起来,NumPy提供了多种灵活的方法来进行数组拼接操作。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python里面数组拼接方法介绍](https://blog.csdn.net/shixin_0125/article/details/105829497)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Numpy 拼接数组的各种方式](https://blog.csdn.net/XnCSD/article/details/105880658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

诺坎普的风间

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值