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貌似提供了这样的函数,在搭建深度学习框架时可以直接使用,以后有机会继续扩展。 扩展阅读:最后,附几个二维array中,添加一行或者一列元素的函数: 1 . np.append(a,b,axis=数字)其中,axis = 0表示添加,axis = 1表示添加 2.增加一行或者一列。b = np.row_stack((a, 列元素))c = np.column_stack((a, 行元素)) |