本篇记录一下numpy中常用的几种拼接方法。
直接上示例:
import numpy as np
a=np.array([[1,2,3], [4,5,6]])
b=np.array([[7,8,9], [10,11,12]])
c=np.concatenate([a,b], axis=0)
d=np.concatenate([a,b], axis=1)
e=np.stack([a,b], axis=0)
f=np.stack([a,b], axis=1)
g=np.stack([a,b], axis=2)
h=np.hstack([a,b])
i=np.vstack([a,b])
j=np.c_[a,b]
k=np.r_[a,b]
'''
c
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
d
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
e
[[[ 1 2 3]
[ 4 5 6]]
[[ 7 8 9]
[10 11 12]]]
f
[[[ 1 2 3]
[ 7 8 9]]
[[ 4 5 6]
[10 11 12]]]
g
[[[ 1 7]
[ 2 8]
[ 3 9]]
[[ 4 10]
[ 5 11]
[ 6 12]]]
h
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
i
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
j
[[ 1 2 3 7 8 9]
[ 4 5 6 10 11 12]]
k
[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[10 11 12]]
'''
拼接操作要求数组shape相同,以列表[a,b]
或者元组(a,b)
作为参数。
下面简要分析:
np.concatenate
用于数组a,b
拼接,拼接结果c,d
数组dim=2
,与用于拼接的a,b
数组dim相同,直观的看像是把数组b
的某个维度的元素塞到a
对应的维度中。
np.stack
用于a,b
堆叠,堆叠结果e,f,g
数组dim=3
,多了一维。直观看是把数组a,b
对应的axis
用括号括起来。比如axis=1
,就是把a,b
的第一行括起来,第二行括起来,axis=1
表示按行堆叠。
np.hstack
用于横向堆叠,效果与np.concatenate([a, b], axis=1)
效果相同,沿着第二维拼接。
np.vstack
用于纵向堆叠,效果与np.concatenate([a, b], axis=0)
效果相同,沿着第一维拼接;如果a,b
是一维shape=(N,)
,则先添加a,b
维度到shape=(1, N)
再拼接,与np.stack([a, b], axis=0)
相同
np.c_
np.r_[]
用于行堆叠,与np.hstack
效果相同。
np.c_[]
用于列堆叠,与np.vstack
效果相同。