python将两个二维array叠加成三维array的实现方法
遇到这样一个需求:程序中每次循环生成一个二维array,需要把每次循环的二维array叠加成一个三维的array,例如有如下两个矩阵:
A=⎡⎣⎢a11a21a11a12a22a12a13a23a13⎤⎦⎥A=[a11a12a13a21a22a23a11a12a13]
B=⎡⎣⎢b11b21b11b12b22b12b13b23b13⎤⎦⎥B=[b11b12b13b21b22b23b11b12b13]
组合成以下这种形式:
这样组合之后,有一个非常大的优点就是:保持原有的二维array的形式不变,便于以后取出,比如说我想从C中取出A,只需要执行:
A=C[0,:]
即可。
但是百度之后发现,在python中,numpy函数包中并没有对应的函数来实现三维array中不断添加二维array(有知道这个函数的欢迎在评论区告诉我)
这里,提供两种“曲线救国”的解决方案:
方法一:
对于两个(或者多个)同一维度的矩阵,直接利用np.array()重新构造一个array,这样可以变相起到扩展维数的作用。例如:
import numpy as npa = np.array(
[[1,2,3],[4,5,6]]
)b = np.array(
[[2,2,3],[4,5,6]]
)c = np.array(
[[3,2,3],[4,5,6]]
)
print
(
'矩阵a:\n'
,a)
print
(
'维数:'
,a.shape)com = np.array([a,b,c])
print
(
'合并矩阵:\n'
,com)
print
(
'维数:'
,com.shape)
输出结果为:
矩阵a:
[[1 2 3] [4 5 6]]
维数: (
2
,
3
)合并矩阵:
[[[1 2 3] [4 5 6]]
[[2 2 3] [4 5 6]]
[[3 2 3] [4 5 6]]
]维数: (
3
,
2
,
3
)
方法二:
但是,如果两个array,使用方法一时会出现如下结果:
import numpy as npaa = np.array(
[[[1,2,3],[4,5,6]]
,
[[2,2,3],[4,5,6]]
,
[[3,2,3],[4,5,6]]
])a = np.array(
[[4,2,3],[4,5,6]]
)com = np.array([aa,a])
print
(
'合并矩阵:\n'
,com)
print
(
'维数:'
,com.shape)
输出结果:
合并矩阵: [array(
[[[1, 2, 3], [4, 5, 6]]
,
[[2, 2, 3], [4, 5, 6]]
,
[[3, 2, 3], [4, 5, 6]]
]) array(
[[4, 2, 3], [4, 5, 6]]
)]维数: (
2
,)
输出结果:
在深度学习中,也有类似于这样的需求,比如用图片来训练模型时,彩色图片就是一个个三维数组,需要把一批图片都送到网络中就需要把多个三维矩阵叠加。
tensorflow貌似提供了这样的函数,在搭建深度学习框架时可以直接使用,以后有机会继续扩展。
tensorflow貌似提供了这样的函数,在搭建深度学习框架时可以直接使用,以后有机会继续扩展。
扩展阅读:
最后,附几个二维array中,添加一行或者一列元素的函数:
1 . np.append(a,b,axis=数字)
其中,axis = 0表示添加,axis = 1表示添加
2.增加一行或者一列。b = np.row_stack((a, 列元素))c = np.column_stack((a, 行元素))
更多免费技术资料可关注:annalin1203