对python 矩阵转置transpose的实例讲解
在读图片时,会用到这么的一段代码:
image_vector_len=np.prod(image_size)#总元素大小,3*55*47 img=Image.open(path) arr_img=np.asarray(img,dtype='float64') arr_img=arr_img.transpose(2,0,1).reshape((image_vector_len,))#47行,55列,每个点有3个元素rgb。再把这些元素一字排开
transpose是什么意识呢?看如下例子:
arr1=array([[[0,1,2,3], [4,5,6,7]], [[8,9,10,11], [12,13,14,15]]])
这是原来的矩阵。如果对其进行转置,执行arr2=arr1.transpose((1,0,2))
得到:
array([[[0,1,2,3], [8,9,10,11]], [[4,5,6,7], [12,13,14,15]]])
过程是怎样的?
arr1.shape应该是(2,2,4)意为2维,2*4矩阵
arr1.transpose(*args)里面的参数,可以这么理解,他是调换arr1.shape的顺序,咱来给arr1.shape标一下角标哈,(2[0],2[1],4[2])[]里是shape的索引,对吧,
transpose((1,0,2))的意思是按照这个顺序重新设置shape也就是(2[1],2[0],4[2])
虽然看起来变换前后的shape都是2,2,4,但是问题来了,transpose是转置
shape按照(1,0,2)的顺序重新设置了,array里的所有元素也要按照这个规则重新组成新矩阵
比如8在arr1中的索引是(1,0,0)那么按照刚才的变换规则,就是(0,1,0)看看跟你结果arr2的位置一样了吧,依此类推..
另外一个知识点:
对于一维的shape,转置是不起作用的,举例:
x=linspace(0,4,5) #array([0.,1.,2.,3.,4.]) y=transpose(x)#会转置失败。
如果想正确使用的话:
x.shape=(5,1) y=transpose(x)#就可以了
以上这篇对python矩阵转置transpose的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。