numpy数组的数组拼接方式非常多,特写一篇blog来总结一下。
想转载请留言获批准。


hstack, vstack, dstack, concatenate, stack这些函数都可以用来拼接Numpy数组。还可以利用list来拼接数组。
对于拼接的效果其实我们可以划分为2类:

  1. 横向拼接:hstack, vstack, concatenate等。横向拼接的意思是指,拼接不会产生更高的维度。比如两个2x2的二维矩阵拼接以后,它还是一个二维矩阵,只是变胖了,变成4x2或者2x4。
  2. 扩维拼接:dstack, stack等。拼接后会产生更高的维度,两个(2, 2)的二维矩阵拼接会产生(2, 2, 2)的三维矩阵。

1. 水平拼接hstack

np.hstack()
import numpy as np
a = np.array([1, 1], [1, 1])
b = np.array([2, 2], [2, 2])
c = np.hstack((a, b))
print(c)
print(c.shape)

输出为:

array([[1, 1, 2, 2],[1, 1, 2, 2]])
(2, 4)

2. 垂直拼接数组vstack

np.vstack()
import numpy as np
a = np.array([1, 1], [1, 1])
b = np.array([2, 2], [2, 2])
c = np.vstack((a, b))
print(c)
print(c.shape)

输出为:

array([[1, 1],[1, 1],[2, 2],[2, 2]])
(4, 2)

3.深度拼接dstack

np.dstack()
import numpy as np
a = np.array([1, 2], [3, 4])
b = np.array([5, 6], [7, 8])
c = np.dstack((a, b))
print(c)
print(c.shape)

输出为:

array([[[1, 5],[2, 6]],[[3, 7],[4, 8]]])
(2, 2, 2)

4.concatenate()函数拼接
concatenate()是非常灵活的拼接函数。

np.concatenate()
import numpy as np
a = np.array([1, 1], [1, 1])
b = np.array([2, 2], [2, 2])
c = np.concatenate((a, b), axis=0)
print(c)
print(c.shape)

输出为:

array([[1, 1],[1, 1],[2, 2],[2, 2]])
(4, 2)

可见axis=0时,concatenate的功能和vstack一样。axis=0的含义就是,在第0个维度扩展,其他维度保持不变。这里的第0个维度之前是2,现在是4。
axis=1时,输出为:

array([[1, 1, 2, 2],[1, 1, 2, 2]])
(2, 4)

可见axis=1时,concatenate的功能和hstack一样。
注意,axis的取值只能小于被拼接数组的维度(2),所以axis在这里只能取0和1。
但对于多维数组的拼接,concatenate就十分方便了。


5.利用list来实现扩维拼接
我们先构建一个空list

import numpy as np
ls = []
a = np.array([[1, 1],[1, 1]])
b = np.array([[2, 2],[2, 2]])
ls.append(a)
ls.append(b)
c = np.array(ls)
print(c)
print(c.shape)

输出为:

array([[[1, 1],[1, 1]],[[2, 2],[2, 2]]])
(2, 2, 2)

注意,这一操作和dstack是有不同之处的。这个操作是将两个数组叠放在一起而已。


6. 用stack来拼接数组
我们知道stack是扩维拼接,和concatenate有本质的区别。对于两个(2, 2)的数组用stack拼接,我们的结果一定是个三维的,而concatenate的结果是二维的。
涉及到数组的扩维,我们就可以从维度上来理解stack的操作了,初始为2个shape为(2,2)的矩阵,扩展之后:
如果axis = 0,得出结果的shape应该是(_, 2, 2)。看清楚 下划线没有,这个位置的维度是虚位以待的,如果有n(n>=2)个矩阵来拼接,这个下划线的数值就应该是n;(在本博文的栗子里,n=2)
如果axis=1,结果应该是(2, _, 2),在第1个维度上虚位以待;
如果axis=2,结果应该是(2, 2, _),在第2个维度上虚位以待;

np.stack()
import numpy as np
a = np.array([1, 1], [1, 1])
b = np.array([2, 2], [2, 2])
c = np.stack((a, b), axis=0)
print(c)
print(c.shape)

输出为:

array([[[1, 1],[1, 1]],[[2, 2],[2, 2]]])
(2, 2, 2)

当axis=0时,np.stack就可以实现list一样功能的扩维拼接
再来看axis=1:
为了更容易看到效果,把两个数组的值改一下:

import numpy as np
a = np.array([1, 2], [3, 4])
b = np.array([5, 6], [7, 8])
c = np.stack((a, b), axis=0)
print(c)
print(c.shape)
array([[[1, 2],[5, 6]],[[3, 4],[7, 8]]])
(2, 2, 2)

再看当axis=2时,

array([[[1, 5],[2, 6]],[[3, 7],[4, 8]]])
(2, 2, 2)

可见,axis=2时,stack和dstack的效果一样。

numpy数组的拼接(扩维拼接和非扩维拼接)相关推荐

  1. Numpy数组拼接总结

     方法一: Numpy中使用级联函数concatenate()来连接两个数组,可选参数为连接轴(连接维度) axis,axis默认为0,即默认在第0维上进行元素的连接. 级联函数使两数组指定维axis ...

  2. Python中numpy数组的拼接、合并

    转载 https://blog.csdn.net/qq_39516859/article/details/80666070?utm_source=blogxgwz1 Python中numpy数组的合并 ...

  3. numpy数组切片:一维/二维/数组

    文章目录 numpy数组切片操作 一维数组(冒号:) 1.一个参数:a[i] 2.两个参数:b=a[i:j] 3.三个参数:格式b = a[i:j:s] 4.例子 二维数组(逗号,) 取元素 X[n0 ...

  4. numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array)

    numpy使用[]语法索引二维numpy数组中指定行列位置的数值内容(access value at certain row and column in numpy array) 目录

  5. numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之后所有数据行的数值内容(accessing rows in numpy array after specifc row) 目录

  6. numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array)

    numpy使用[]语法索引二维numpy数组中指定数据行的数值内容(accessing the specific row in numpy array) 目录 numpy使用[]语法索引二维numpy ...

  7. numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range)

    numpy使用[]语法索引二维numpy数组中指定范围数据行的数值内容(accessing rows in numpy array with specific range) 目录

  8. numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row)

    numpy使用[]语法索引二维numpy数组中指定指定行之前所有数据行的数值内容(accessing rows in numpy array before specifc row) 目录

  9. numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column)

    numpy使用[]语法索引二维numpy数组中指定指定列之后所有数据列的数值内容(accessing columns in numpy array after specifc column) 目录

最新文章

  1. 向服务器请求数据的五种技术
  2. C++ Primer 5th笔记(chap 17 标准库特殊设施)匹配标志
  3. Video Game Troubles(有依赖的背包)
  4. Apache详细介绍 - [ Apache v2.4.10 for Windows ]
  5. MethodInvokingJobDetailFactoryBean的并发问题
  6. python接口自动化(三十六)-封装与调用--流程类接口关联续集(详解)
  7. jpa内网mysql_mysql+jpa简单实现步骤
  8. 【读书笔记】-《软件测试的艺术》
  9. 基于voidAR实现增强现实之初音未来
  10. Java8流List转Map
  11. MPEG4视频压缩编码技术详解
  12. 海量图片存储与运算架构
  13. ccxprocess启动项可以禁用么_启动项禁用
  14. 上门洗车APP --- Android客户端开发 之 项目结构介绍,大厂面试必备技能
  15. Java程序员的职业规划是什么?叩丁狼的建议
  16. 云计算通俗解释,什么叫云计算
  17. 小程序及H5皮肤包推荐及范例整理
  18. 安装Asterisk
  19. Camtasia2023最好用的电脑屏幕录制软件
  20. AD域帐号批量查询锁定帐号,批量解锁域帐号

热门文章

  1. 微信支付分开通了,来看看你有多少分
  2. 如何将u盘里面的两个分区变成为一个分区
  3. 区块链游戏常见的 10 种分类
  4. 微分是线性主部定义应该怎么说?
  5. mysql——关于找不到vrcuntime140.dll与vrcuntime140_1.dll的问题
  6. CSS图片保持原比例
  7. 记录一下使用微信小程序wx-open-launch-weapp组件
  8. 2012年6月10日免费http代理大全
  9. 线程池大小如何确定?
  10. 形态学运用(去除图像噪点,提取水平线,垂直线)--OPenCV08