numpy合并数组np. concatenate、np. hstack、np. vstack、np. dstack

概述

本文介绍numpy合并数组

中文官方网址:
https://www.numpy.org.cn/reference/routines/array_manipulation_routines.html

主要有以下方法:

  1. np.concatenate()
  2. np.hstack()
  3. np.vstack()

concatenate()

语法

def concatenate((a1, a2, ...), axis)
参数说明:
  • (a1, a2, …):a1,a2 类似数组类型,将这两个数组合并到一起
  • axis:默认值是0。
    • 如果a1,a2是一维数组,只能是0
    • 如果a1,a2是二维数组:0表示按照行拼接,1表示按照列拼接
返回值

返回新数组,ndarray类型

一维数组

使用 concatenate() 函数只能在 0 轴上拼接,即水平方向拼接

import numpy as np

arr=np.array([1,2,3,4])
arr2=np.array([10,20,30,40])

print(arr)
print(arr2)

arr3=np.concatenate((arr,arr2))
print('-'*50)
print(arr3)

执行结果:

[ 1  2  3  4 10 20 30 40]

二维数组

axis为0时
import numpy as np

arr=np.array(range(6)).reshape(2,3)
arr2=np.array(range(10,16)).reshape(2,3)

print(arr)
print(arr2)

arr3=np.concatenate((arr,arr2),axis=0)
print('-'*50)
print(arr3)

执行结果:

[[ 0  1  2]
 [ 3  4  5]
 [10 11 12]
 [13 14 15]]

相当于在垂直方向上合并数据

axis为1时
import numpy as np

arr=np.array(range(6)).reshape(2,3)
arr2=np.array(range(10,16)).reshape(2,3)

print(arr)
print(arr2)

arr3=np.concatenate((arr,arr2),axis=1)
print('-'*50)
print(arr3)

执行结果

[[ 0  1  2 10 11 12]
 [ 3  4  5 13 14 15]]

相当于在水平方向上合并数据

hstack()

h是horizontal缩写,即水平,在 水平方向 上合并数据

相当于 concatenate() 函数的简化版

底层调用了concatenate()

  • 当传入的数组是 一维数组 ,调用concatenate(arrs, 0)
  • 当传入的数组是 二维数组,调用concatenate(arrs, 1)

语法

hstack(tup)
参数说明:
  • tup:类似数组类型
返回值

返回新数组,ndarray类型

例子

import numpy as np

arr=np.array(range(6)).reshape(2,3)
arr2=np.array(range(10,16)).reshape(2,3)

print(arr)
print(arr2)

arr3=np.hstack((arr,arr2))
print('-'*50)
print(arr3)

执行结果如下:

[[ 0  1  2 10 11 12]
 [ 3  4  5 13 14 15]]

vstack()

v是vertical缩写,在 垂直方向 上合并数据

语法

vstack(tup)
参数说明:
  • tup:类似数组类型
返回值

返回新数组,ndarray类型

一维数组

import numpy as np

arr=np.array([1,2,3,4])
arr2=np.array([10,20,30,40])

print(arr)
print(arr2)

arr3=np.vstack((arr,arr2))
print('-'*50)
print(arr3)

执行结果:

[[ 1  2  3  4]
 [10 20 30 40]]


2个一维数组合并成1个二维数组,新数组中第一行是第一个数组,第二行是第二个数组

二维数组

当传入的参数是二维数组时,相当于调用:
np.concatenate((arr,arr2),axis=0)

代码如下:

import numpy as np

arr=np.array(range(6)).reshape(2,3)
arr2=np.array(range(10,16)).reshape(2,3)

print(arr)
print(arr2)

arr3=np.vstack((arr,arr2))
print('-'*50)
print(arr3)

执行结果:

[[ 0  1  2]
 [ 3  4  5]
 [10 11 12]
 [13 14 15]]

dstack()

d是depth缩写,按顺序深度合并数组

语法

dstack(tup)
参数说明:
  • tup:类似数组类型
返回值

返回新数组,ndarray类型

一维数组

import numpy as np

arr=np.array([1,2,3,4])
arr2=np.array([10,20,30,40])

print(arr)
print(arr2)

arr3=np.dstack((arr,arr2))

print('-'*50)
print(arr3)
print(type(arr3),arr3.shape)

执行结果:

[[[ 1 10]
  [ 2 20]
  [ 3 30]
  [ 4 40]]]
<class 'numpy.ndarray'> (1, 4, 2)

2个一维数组,生成1个3维数组

二维数组

import numpy as np

arr=np.array(range(6)).reshape(2,3)
arr2=np.array(range(10,16)).reshape(2,3)

print(arr)
print(arr2)

arr3=np.dstack((arr,arr2))

print('-'*50)
print(arr3)
print(type(arr3),arr3.shape)

执行结果如下:

[[[ 0 10]
  [ 1 11]
  [ 2 12]]

 [[ 3 13]
  [ 4 14]
  [ 5 15]]]
<class 'numpy.ndarray'> (2, 3, 2)

2个二维数组,合并成1个三维数组


原文出处:/show_1EF40PkS1Df2.html