python矩阵转置
2019-07-19 本文已影响0人
JerryLoveCoding
python中的矩阵转置
首先,数据应该是np.asarray型,
然后,使用numpy.transpose来操作。
transpose方法只能处理高维数组(>1),如果处理一维数组会报错;
对于二维数组:
data1 = np.arange(4).reshape((2,2))
print(data1)
>>[[0 1]
[2 3]]
data1 = np.transpose(data1)
print(data1)
>>[[0 2]
[1 3]]
对于三维数组:(3,2,2)的数组对应转置为(2,2,3)
data1 = np.arange(12).reshape((3,2,2))
print(data1)
>>[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
data1 = np.transpose(data1)
print(data1)
>>[[[ 0 4 8]
[ 2 6 10]]
[[ 1 5 9]
[ 3 7 11]]]
对于四维数组:(2,3,2,2)的数组对于转置为(2,2,3,2)
data1 = np.arange(24).reshape((2,3,2,2))
print(data1)
>>[[[[ 0 1]
[ 2 3]]
[[ 4 5]
[ 6 7]]
[[ 8 9]
[10 11]]]
[[[12 13]
[14 15]]
[[16 17]
[18 19]]
[[20 21]
[22 23]]]]
data1 = np.transpose(data1)
print(data1)
>>[[[[ 0 12]
[ 4 16]
[ 8 20]]
[[ 2 14]
[ 6 18]
[10 22]]]
[[[ 1 13]
[ 5 17]
[ 9 21]]
[[ 3 15]
[ 7 19]
[11 23]]]]
所以默认的transpose()是将数组的形状和对应的元素全部倒置。
对于有参数的transpose:对于三维数组,原型数组的参数应该是(0,1,2),对应的是外行,子行,子列,如果变成(1,0,2)就是将外行变成子行,子行变成外行。对于元素索引也发生同样改变,比如原来的元素3的索引是(0,1,1),转换后就是(1,0,1)
data1 = np.arange(12).reshape((2,3,2))
print(data1)
data2 = data1.transpose(1, 0, 2)
print(data2)
>>[[[ 0 1]
[ 2 3]
[ 4 5]]
[[ 6 7]
[ 8 9]
[10 11]]]
>>[[[ 0 1]
[ 6 7]]
[[ 2 3]
[ 8 9]]
[[ 4 5]
[10 11]]]