大家好,又见面了,我是你们的朋友全栈君。
arr = np.arange(16).reshape((2, 2, 4))
arr的array是这样的
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11],
[12, 13, 14, 15]]])
我们对arr进行transpose转置,arr2 = arr.transpose((1,0,2)),结果是这样:
array([[[ 0, 1, 2, 3],
[ 8, 9, 10, 11]],
[[ 4, 5, 6, 7],
[12, 13, 14, 15]]])
这是怎么来的呢。
arr.transpose((1,0,2))的1,0,2三个数分别代表shape()的三个数的顺序,初始的shape是(2,2,4),也就是2维的2 x 4矩阵,索引分别是shape的[0],[1],[2],arr.transpose((1,0,2))之后,我们的索引就变成了shape[1][0][2],对应shape值是shape(2,2,4),所以矩阵形状不变。
与此同时,我们矩阵的索引也发生了类似变化,如arr中的4,索引是arr[0,1,0],arr中的5是arr[0,1,1],变成arr2后,4的位置应该是在[1,0,0],5的位置变成[1,0,1],同理8的索引从[1,0,0]变成[0,1,0]。
这里正对opencv和caffe图像格式转化说明一下:
caffe存储图片使用的是:C×H×W
opencv存储图片使用的是:H×W×C
假设通过opencv处理的图像的索引为image([0],[1],[2]).故转化成caffe的格式为image([2],[0],[1]).
使用的函数便是image.transpose(2,0,1)
发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/140798.html原文链接:https://javaforall.cn