python将两个二维array叠加成三维array的实现方法

490 阅读2分钟

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, 行元素))

更多免费技术资料可关注:annalin1203