Python——vstack()、append()、concatenate()使用

1. numpy.vstack()

两个矩阵分行合并。

1
2
3
4
5
import numpy as np
s = np.array([[1,0,1],[1,1,2]])
s2 = np.array([[1,0,1],[2,2,2],[3,1,3]])
v = np.vstack((s,np.expand_dims(s2[0],0)))
print(v)

结果:

[[1 0 1]
[1 1 2]
[1 0 1]]

np.expand_dims将[1,0,1]升维到[[1,0,1]],然后np.vstack进行合并,合并后shape为(3,3)

2. numpy.concatenate()

concatenate(a_tuple, axis=0, out=None)
参数说明:
a_tuple:对需要合并的数组用元组的形式给出,(a1,a2,a3…)
axis: 沿指定的轴进行拼接,默认0,即第一个轴,分行合并

维度必须相同,比如下面例子1不能“ar2 = np.array([[7,8], [11,12],[14,15]])”

例子:

1
2
3
4
ar1 = np.array([[1,2,3], [4,5,6]])
ar2 = np.array([[7,8,9], [11,12,13],[14,15,16]])
v = np.concatenate((ar1, ar2))
print(v)

结果:

[[ 1 2 3]
[ 4 5 6]
[ 7 8 9]
[11 12 13]
[14 15 16]]

1
2
3
R_pre = np.zeros((20,120))
for i in range(20):
R_pre[i] = np.concatenate((R_all[i][0],R_all[i][1],R_all[i][2]))

R_all为shape是(20,3)的array数组。R_all[0]shape为(3,),R_all[0][0]shape为(30,),R_all[0][1]shape为(40,),R_all[0][2]shape为(50,)
np.concatenate将把R_all[i][0],R_all[i][1],R_all[i][2]拼到一起,最终shape为(20,120)

R_all
[[array([1.6848972 , 0. , 0. , 3.398359 , 2.530793 ,
1.0050455 , 2.9787443 , 0.6477883 , 2.556338 , 0.73463535,
1. , 0. , 0. , 0. , 0. ,
2. , 0. , 2.7559242 , 0.47480136, 2.2723987 ,
1.040998 , 0.63076216, 0.12816067, 1.9125026 , 3.1089356 ,
0.04926831, 2.5731335 , 0. , 0. , 3.6136327 ,
2.1885748 , 5.271537 , 2.4973857 , 2.3315785 , 0.4876842 ,
2.5446043 , 2.8961205 , 2.2814133 , 2.7040894 , 0. ,
1. , 0.40623373, 3.410592 , 0.04632151, 1.6073561 ,
3.6362302 , 0.71310234, 0.807002 , 0.43683317, 0.69910496],
dtype=float32)
array([2.620739 , 0. , 1.3929726 , 0.6371676 , 0. ,
1. , 5.4475865 , 2.6643863 , 3.880937 , 4.7303853 ,
0.05517461, 5.2109375 , 0. , 0. , 0. ,
0.98558354, 4.7299247 , 0. , 3.8981698 , 3.6492205 ,
1. , 0. , 6.190553 , 0.956293 , 3.5290947 ,
2. , 0. , 1.8282684 , 0.32657242, 2.6781952 ,
3. , 0.69895065, 5.339527 , 0. , 0. ,
5.5791173 , 0. , 0.11749397, 7.2194476 , 0.714684 ],
dtype=float32)
array([6.9061866 , 6.52601 , 0. , 0. , 4.5311055 ,
7.437533 , 0. , 2.2622852 , 3.6607296 , 0. ,
1. , 1.1706101 , 2.0249732 , 2.5909576 , 1.5096041 ,
5.1143856 , 0. , 7.4348016 , 8.265553 , 4.404272 ,
1. , 8.330065 , 6.1199856 , 1.8026098 , 0. ,
2.1523745 , 4.295476 , 0. , 0.25838286, 4.181186 ],
dtype=float32)]
[array([0. , 1.0517871 , 0. , 1.9522364 , 3.4467335 ,
1.6532538 , 4.5833445 , 0. , 2.8597844 , 0. ,
1.0986375 , 1.2344751 , 0.05524588, 0. , 0. ,
1. , 0.48994532, 2.0663538 , 0.0655461 , 1.4628885 ,
2. , 2.5271173 , 1.6658872 , 2.042052 , 1.8442372 ,
3. , 1.60442 , 0. , 0. , 2.941807 ,
2.429257 , 5.0982413 , 1.9689019 , 0. , 1.2967114 ,
1. , 0.915429 , 2.7474372 , 1.6846974 , 0. ,
2. , 0.01763296, 2.0742316 , 0.24807084, 1.9481957 ,
3.6349213 , 0. , 0.01666034, 0. , 0.606744 ],
dtype=float32)
array([0.8532868 , 0. , 3.8194625 , 3.5880175 , 0. ,
1. , 5.657879 , 2.5737116 , 2.7199547 , 3.7972608 ,
2. , 5.668191 , 0. , 0. , 0. ,
3. , 4.598634 , 0. , 3.8855243 , 1.230322 ,
4. , 0. , 4.118646 , 0.68806565, 3.5005343 ,
5. , 1.1631998 , 3.6151364 , 0.6011877 , 4.762535 ,
6. , 1.906799 , 6.2813354 , 0. , 0.844307 ,
6.1294475 , 0. , 0. , 4.284295 , 1.6493309 ],
dtype=float32)
array([7.5145326 , 6.0982947 , 0. , 0. , 4.4792795 ,
5.9737115 , 0. , 1.8298718 , 3.148109 , 0. ,
1. , 1.504651 , 2.8004415 , 3.89071 , 2.428724 ,
4.807837 , 0. , 4.968338 , 7.585526 , 2.6616354 ,
1. , 6.461577 , 7.4716034 , 1.954241 , 0. ,
0.87860256, 4.8513737 , 0. , 0.33363724, 3.5909863 ],
dtype=float32)]

[array([2.7897108 , 0.20866081, 0.13220854, 2.7202427 , 1.5674844 ,
0.10765126, 0.6920907 , 1.729721 , 0. , 0.24034634,
0.5080626 , 0. , 0.83318 , 0. , 0.48236543,
0.82242155, 0. , 2.2105615 , 0. , 0.1478676 ,
4.16913 , 0. , 1.0112963 , 2.1834922 , 1.1143222 ,
1.4266597 , 0.01625035, 0. , 0. , 2.2396529 ,
2.5664916 , 3.9461515 , 1.1411588 , 3.1272795 , 0.1037966 ,
2.0988076 , 1.3239028 , 3.7377734 , 3.2496672 , 0. ,
1. , 1.2223835 , 3.0089378 , 0. , 0.86522657,
4.675812 , 2.1618671 , 0. , 0.35128778, 0.4188891 ],
dtype=float32)
array([1.1148797 , 0. , 0. , 0. , 0. ,
1. , 3.8114898 , 0.07180021, 2.3876183 , 4.440781 ,
1.6769646 , 3.6686838 , 0. , 0. , 0. ,
4.4018536 , 3.0599968 , 0. , 2.646227 , 4.513127 ,
1. , 0.16424567, 7.948415 , 2.2791777 , 4.057054 ,
2. , 0. , 0. , 0.67363834, 3.645394 ,
0.25136846, 1.8742002 , 0.74671173, 4.585761 , 0.66469884,
1.6343927 , 0. , 0.9501083 , 9.39395 , 0. ],
dtype=float32)
array([ 5.2303033, 3.398737 , 0. , 3.7024248, 4.825684 ,
6.3753657, 0. , 2.3967223, 3.570145 , 2.7877963,
2.67991 , 0. , 0. , 3.125414 , 1.5916126,
3.8564463, 1.4738425, 10.70936 , 3.1851664, 7.136737 ,
1.9078373, 10.745646 , 3.6944306, 1.1660497, 0. ,
5.3501906, 2.4445841, 1.090338 , 0. , 2.5494943],
dtype=float32)]]

R_all[0]:
[array([1.6848972 , 0. , 0. , 3.398359 , 2.530793 ,
1.0050455 , 2.9787443 , 0.6477883 , 2.556338 , 0.73463535,
1. , 0. , 0. , 0. , 0. ,
2. , 0. , 2.7559242 , 0.47480136, 2.2723987 ,
1.040998 , 0.63076216, 0.12816067, 1.9125026 , 3.1089356 ,
0.04926831, 2.5731335 , 0. , 0. , 3.6136327 ,
2.1885748 , 5.271537 , 2.4973857 , 2.3315785 , 0.4876842 ,
2.5446043 , 2.8961205 , 2.2814133 , 2.7040894 , 0. ,
1. , 0.40623373, 3.410592 , 0.04632151, 1.6073561 ,
3.6362302 , 0.71310234, 0.807002 , 0.43683317, 0.69910496],
dtype=float32)
array([2.620739 , 0. , 1.3929726 , 0.6371676 , 0. ,
1. , 5.4475865 , 2.6643863 , 3.880937 , 4.7303853 ,
0.05517461, 5.2109375 , 0. , 0. , 0. ,
0.98558354, 4.7299247 , 0. , 3.8981698 , 3.6492205 ,
1. , 0. , 6.190553 , 0.956293 , 3.5290947 ,
2. , 0. , 1.8282684 , 0.32657242, 2.6781952 ,
3. , 0.69895065, 5.339527 , 0. , 0. ,
5.5791173 , 0. , 0.11749397, 7.2194476 , 0.714684 ],
dtype=float32)
array([6.9061866 , 6.52601 , 0. , 0. , 4.5311055 ,
7.437533 , 0. , 2.2622852 , 3.6607296 , 0. ,
1. , 1.1706101 , 2.0249732 , 2.5909576 , 1.5096041 ,
5.1143856 , 0. , 7.4348016 , 8.265553 , 4.404272 ,
1. , 8.330065 , 6.1199856 , 1.8026098 , 0. ,
2.1523745 , 4.295476 , 0. , 0.25838286, 4.181186 ],
dtype=float32)]

3. numpy.append()

append(arr, values, axis=None)
参数说明:
arr:array_like的数据
values: array_like的数据,若axis为None,则先将arr和values进行ravel扁平化,再拼接;否则values应当与arr的shape一致,或至多
在拼接axis的方向不一致
axis:进行append操作的axis的方向,默认无

1
2
3
4
5
6
7
8
9
v1 = np.append(ar1, ar2)    # 先ravel扁平化再拼接,所以返回值为一个1维数组

v2 = np.append(ar1, ar2, axis=0) # 沿第一个轴拼接,这里为行的方向

v3 = np.append(ar1, ar2, axis=1) # 沿第二个轴拼接,这里为列的方向

print(v1)
print(v2)
print(v3)

结果:

array([ 1, 2, 3, 4, 5, 6, 7, 8, 9, 11, 12, 13])
array([[ 1, 2, 3],
[ 4, 5, 6],
[ 7, 8, 9],
[11, 12, 13]])
array([[ 1, 2, 3, 7, 8, 9],
[ 4, 5, 6, 11, 12, 13]])