遇到这样一个需求:程序中每次循环生成一个二维array,需要把每次循环的二维array叠加成一个三维的array,例如有如下两个矩阵:
组合成以下这种形式:
但是百度之后发现,在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, 行元素))欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |