np.concatenate()是用来对数列或矩阵进行合并的
- 两个一维数组
import numpy as np
a=[1,2,3]
b=[4,5,6]
np.concatenate((a,b),axis=0)
输出为
array([1, 2, 3, 4, 5, 6])
因为上述a和b都是一维的,所以当指定axis=1时,程序就会报错。
AxisError Traceback (most recent call last)
<ipython-input-28-4ae0f9a0b960> in <module>
2 a=np.array([1,2,3])
3 b=np.array([4,5,6])
----> 4 np.concatenate((a,b),axis=1)
<__array_function__ internals> in concatenate(*args, **kwargs)
AxisError: axis 1 is out of bounds for array of dimension 1
- 两个二维数组
import numpy as np
a=np.array([[1,2,3],[111,222,333]])
b=np.array([[4,5,6],[44,55,67]])
print(a)
print('\n矩阵a的维度为:',a.shape)
print(b)
print("\naxis=0的结果为:\n",np.concatenate((a,b),axis=0))
print("\naxis=0的维度为:\n",np.concatenate((a,b),axis=0).shape)
print("\naxis=1的结果为:\n",np.concatenate((a,b),axis=1))
print("\naxis=1的维度为:\n",np.concatenate((a,b),axis=1).shape)
[[ 1 2 3]
[111 222 333]]
矩阵a的维度为: (2, 3)
[[ 4 5 6]
[44 55 67]]
axis=0的结果为:
[[ 1 2 3]
[111 222 333]
[ 4 5 6]
[ 44 55 67]]
axis=0的维度为:
(4, 3)
axis=1的结果为:
[[ 1 2 3 4 5 6]
[111 222 333 44 55 67]]
axis=1的维度为:
(2, 6)
axis=0可以看做直接把b矩阵接在a的下面,即按行进行合并,此时的维度为(4,3),axis=1可以看做将矩阵连接在a的右边,即按列进行合并,此时的维度为(2,6)。
- 两个三维数组
import numpy as np
a=np.array([[[1,2,3],[111,222,333]],[[134,131,423],[134,6356,754]],[[984,1940,2940],[245,245,546]]])
b=np.array([[[13,13,35],[697,2572,33633]],[[13354,132461,4723],[1374,63856,754]],[[9844,19640,2940],[23645,23645,56346]]])
print(a)
print('\n矩阵a的维度为:',a.shape)
print(b)
print("\naxis=0的结果为:\n",np.concatenate((a,b),axis=0)) #axis=0表示在行上加,axis=1表示在列上加
print("\naxis=0的维度为:\n",np.concatenate((a,b),axis=0).shape)
print("\naxis=1的结果为:\n",np.concatenate((a,b),axis=1)) #axis=0表示在行上加,axis=1表示在列上加
print("\naxis=1的维度为:\n",np.concatenate((a,b),axis=1).shape)
print("\naxis=2的结果为:\n",np.concatenate((a,b),axis=2)) #axis=0表示在行上加,axis=1表示在列上加
print("\naxis=2的维度为:\n",np.concatenate((a,b),axis=2).shape)
a和b是两个三维数组,其维度为(3,2,3),输出的结果如下
[[[ 1 2 3]
[ 111 222 333]]
[[ 134 131 423]
[ 134 6356 754]]
[[ 984 1940 2940]
[ 245 245 546]]]
矩阵a的维度为: (3, 2, 3)
[[[ 13 13 35]
[ 697 2572 33633]]
[[ 13354 132461 4723]
[ 1374 63856 754]]
[[ 9844 19640 2940]
[ 23645 23645 56346]]]
axis=0的结果为:
[[[ 1 2 3]
[ 111 222 333]]
[[ 134 131 423]
[ 134 6356 754]]
[[ 984 1940 2940]
[ 245 245 546]]
[[ 13 13 35]
[ 697 2572 33633]]
[[ 13354 132461 4723]
[ 1374 63856 754]]
[[ 9844 19640 2940]
[ 23645 23645 56346]]]
axis=0的维度为:
(6, 2, 3)
axis=1的结果为:
[[[ 1 2 3]
[ 111 222 333]
[ 13 13 35]
[ 697 2572 33633]]
[[ 134 131 423]
[ 134 6356 754]
[ 13354 132461 4723]
[ 1374 63856 754]]
[[ 984 1940 2940]
[ 245 245 546]
[ 9844 19640 2940]
[ 23645 23645 56346]]]
axis=1的维度为:
(3, 4, 3)
axis=2的结果为:
[[[ 1 2 3 13 13 35]
[ 111 222 333 697 2572 33633]]
[[ 134 131 423 13354 132461 4723]
[ 134 6356 754 1374 63856 754]]
[[ 984 1940 2940 9844 19640 2940]
[ 245 245 546 23645 23645 56346]]]
axis=2的维度为:
(3, 2, 6)
其实可以这么理解,axis=0,则表示合并后第一个维度数据要变(axis是从0开始计算的,即第一维表示0),axis=1,则表示合并后第二个维度的数据要变,axis=2,则表示合并后第三个维度数据要变。数据变换一般是两个数组相同维度数值相加。
- 多个数组一起合并
import numpy as np
a=np.array([[[1,2,3],[111,222,333]],[[134,131,423],[134,6356,754]],[[984,1940,2940],[245,245,546]]])
b=np.array([[[13,13,35],[697,2572,33633]],[[13354,132461,4723],[1374,63856,754]],[[9844,19640,2940],[23645,23645,56346]]])
print(a)
print('\n矩阵a的维度为:',a.shape)
print(b)
print("\naxis=0的结果为:\n",np.concatenate((a,b,a),axis=0)) #axis=0表示在行上加,axis=1表示在列上加
print("\naxis=0的维度为:\n",np.concatenate((a,b,a),axis=0).shape)
[[[ 1 2 3]
[ 111 222 333]]
[[ 134 131 423]
[ 134 6356 754]]
[[ 984 1940 2940]
[ 245 245 546]]]
矩阵a的维度为: (3, 2, 3)
[[[ 13 13 35]
[ 697 2572 33633]]
[[ 13354 132461 4723]
[ 1374 63856 754]]
[[ 9844 19640 2940]
[ 23645 23645 56346]]]
axis=0的结果为:
[[[ 1 2 3]
[ 111 222 333]]
[[ 134 131 423]
[ 134 6356 754]]
[[ 984 1940 2940]
[ 245 245 546]]
[[ 13 13 35]
[ 697 2572 33633]]
[[ 13354 132461 4723]
[ 1374 63856 754]]
[[ 9844 19640 2940]
[ 23645 23645 56346]]
[[ 1 2 3]
[ 111 222 333]]
[[ 134 131 423]
[ 134 6356 754]]
[[ 984 1940 2940]
[ 245 245 546]]]
axis=0的维度为:
(9, 2, 3)
和两个数组合并的原理一样,就不多赘述。