高维数组转置换(numpy.transpose)

高维数组泛指二维以上的数组,抽象,不可描述.
在使用numpy.transpose的时候用到,总结一下他的转置的规律.

arr = np.arange(24).reshape((2, 3, 4))
print(arr)
print(arr.transpose((1, 0, 2)))

print(arr.transpose((1, 2, 0)))
print('-' * 40)

print(arr.transpose((2, 0, 1)))
print('-' *40)
print(arr.transpose((2, 1, 0)))

结果如下:


[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]


[[[ 0 1 2 3]
[12 13 14 15]]

[[ 4 5 6 7]
[16 17 18 19]]

[[ 8 9 10 11]
[20 21 22 23]]]


[[[ 0 12]
[ 1 13]
[ 2 14]
[ 3 15]]

[[ 4 16]
[ 5 17]
[ 6 18]
[ 7 19]]

[[ 8 20]
[ 9 21]
[10 22]
[11 23]]]


[[[ 0 4 8]
[12 16 20]]

[[ 1 5 9]
[13 17 21]]

[[ 2 6 10]
[14 18 22]]

[[ 3 7 11]
[15 19 23]]]


[[[ 0 12]
[ 4 16]
[ 8 20]]

[[ 1 13]
[ 5 17]
[ 9 21]]

[[ 2 14]
[ 6 18]
[10 22]]

[[ 3 15]
[ 7 19]
[11 23]]]


理解(上面取成(2,3,4),为了下面方便思考):

  1. transpose中的参数0,1,2可以理解为转置的轴的序号. 则每个轴都有长度的表示.
    在上例中:2轴长度为4,1轴长度为3,0轴长度为2.则转置后的形式也应当如是.
  2. 具体取值方式:

[[[ 0 1 2 3]
[ 4 5 6 7]
[ 8 9 10 11]]

[[12 13 14 15]
[16 17 18 19]
[20 21 22 23]]]


如(2,1,0)
首先参照步骤一,确定转置后的数组形式.


[[[1 1]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]]


然后确定第一组数据有两个(原0轴的长度为2).
两个数据的组成:
显而易见,最公平的方法就是从原数组中抽取两个对称的数组,也即第一个大组的第一个和第二大组的第一个.


[[[0 12]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]

[[1 1]
[1 1]
[1 1]]]


简单来说:
该位置的数据为:从原轴上抽取对应数量的数据.

–>
可以这么看:
将高维数组降维,例如这里将原数组看做一个大数组,只有两个元素,这两个元素可以是数字(也就是数组),或者数组(也就是矩阵),或者多维数组(就是高维数组).这里是一个二维数组.

–<
也可以用三维图画一下,就能看到效果了,印象更加深刻.

你可能感兴趣的:(tech)