numpy中三维数组的理解
三维数组图形–立方体
我们在做图像处理,RNN序列数据,迭代数据的时候会遇到三维数组,我们应该理解这三种情况下三维数组的数据分布是怎么样的,才能更好的理解算法,和程序的原理,其实三维数组就是三维的数,这么说确实很抽象,空洞。但是我们可以将三维数组想象成为一个立方体,三维数组的每个维度代表着立方体的长宽高的一个,假设我们与一个三维数组a[3][3][3],把它形象成为一个变长为3的立方体,每一个维度就是将对的边三等分,我们将第一维度理解为立方体的长,第二维度理解为宽,第三维度理解为高,想象立方体就在我们前面,一个面和我们的身体平行
- a[1]:就表示立方体中间的一个水平面
- a[0][0]:就表示左上角的一个和我们身体垂直的边
- a[:, :,0]:表示与我们身体平行的第一个平面
接下来创建一个是3X3的三维数组
import numpy as np
x = np.arange(27)
print(x)
x = np.reshape(x, (3,3,3))
print('(行,列, 通道)', x.shape)
print(x)
print('第0个水平面', x[0])
print('变成 a ', x[0][0])
下面是数在立方体中的分布
图片中的三维数组
图片是又RGB三种颜色构成的,我们可以将它看作是一个三维数组,这个三维数组就是一个立方体,三维数组的第一维就是图片的宽度
- a[:, :, 0]:表示R通道的长宽图片
RNN中序列数据的三维数组
在rnn中序列数据,其由数据特征维度,数据量维度,数据时间步维度构成,我是这么理解的
- 数据特征维度:就是一个数据数据有多少个特征,可以理解为一个数据数据的向量的人维度
- 数据量维度:就是一个时间步总共有多少个数据输入数据
迭代数据中的三维数组
例如我们要生成一个迭代器,一次输出为一次迭代,一个迭代假设有128个批次(batch),可以用立方体的水平面表示一个批次,立方体的长可以表示数据量维度数据的,宽表示数据特征维度,高表示批次
- a[0] 表示一个批次
- a[0][0] 表示第一个批次的第0个输入数据
- a[0][0][0] 表示第一个批次,第0个输入数据的第0个特征