python

超轻量级php框架startmvc

对python 矩阵转置transpose的实例讲解

更新时间:2020-05-28 13:18:01 作者:startmvc
在读图片时,会用到这么的一段代码:image_vector_len=np.prod(image_size)#总元素大小,3*55*47img=Ima

在读图片时,会用到这么的一段代码:


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的实例讲解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。

python 矩阵转置