python---之关于python数组存储方式的理解

一.二维矩阵,如下:
a1 = np.zeros(( 3 , 4 ))    # 创建3*4全零二维数组
输出:
array([[ 0. 0. 0. 0. ],
        [ 0. 0. 0. 0. ],
        [ 0. 0. 0. 0. ]])
可以看出创建了一个3×4的矩阵,由于python与matlab都是行优先存储的,所以行也就是第一个维度3写在前面,第二个维度列4写在后面

二:三维矩阵:

a2 = np.ones(( 2 , 3 , 4 ), dtype = np.int16)  # 创建2*3*4全1三维数组
a2 = np.ones(( 2 , 3 , 4 ), dtype = 'int16' )     # 创建2*3*4全1三维数组
输出:
array([[[ 1 , 1 , 1 , 1 ],
         [ 1 , 1 , 1 , 1 ],
         [ 1 , 1 , 1 , 1 ]],
 
        [[ 1 , 1 , 1 , 1 ],
         [ 1 , 1 , 1 , 1 ],
         [ 1 , 1 , 1 , 1 ]]], dtype = int16)

创建(2,3,4)维度的矩阵,行优先存储,其实就是一个立方体,2,3为一个平面,3,4为一个平面,2,4为一个平面,

虽然我平常用的方式是看第一个括号,我就把它定为第一维,这是一个正确的方法

但是,从数组输出直观上显示,好像第一维度是3,第一个平面是3,4。

其实这就是一个立方体,电脑上显示出来直观的不一定就是第一个维度的面,应该画一个立方体的图,就可以得知,哪个是第一维度的面。

二:关于三维数组平面:

比如脑部MRI图片,维度为(x,y,z)我们看到的水平面,也就是z轴上的平面,我们总会认为水平面就是第一个,和第二个维度(x,y),其实不对,应该是第2,个维度,(y,z)

如下图所示:


即水平吗维度是3,3的 012,345,678


所以,在我的脑部MRI图像切块的时候应该采取[;,;,z]才能够切到水平吗的块

然后存入lmdb的时候需要转制,因为caffe的数据结构是按照列优先存储的


参考:https://www.cnblogs.com/xzcfightingup/p/7598293.html

猜你喜欢

转载自blog.csdn.net/zxyhhjs2017/article/details/80644684