这个函数如果括号内不带参数,就相当于转置,和.T效果一样,而今天主要来讲解其带参数。
我们看如下一个numpy的数组:
1
2
3
4
5
6
7
|
`arr = np.arange( 16 ).reshape(( 2 , 2 , 4 ))
arr =
array([[[ 0 , 1 , 2 , 3 ],
[ 4 , 5 , 6 , 7 ]],
[[ 8 , 9 , 10 , 11 ],
[ 12 , 13 , 14 , 15 ]]])
`
|
那么有:
1
2
3
4
5
6
7
8
9
10
11
12
|
arr.transpose( 2 , 1 , 0 )
array([[[ 0 , 8 ],
[ 4 , 12 ]],
[[ 1 , 9 ],
[ 5 , 13 ]],
[[ 2 , 10 ],
[ 6 , 14 ]],
[[ 3 , 11 ],
[ 7 , 15 ]]])
|
为什么会是这样的结果呢,这是因为arr这个数组有三个维度,三个维度的编号对应为(0,1,2),比如这样,我们需要拿到7这个数字,怎么办,肯定需要些三个维度的值,7的第一个维度为0,第二个维度为1,第三个3,所以arr[0,1,3]则拿到了7
1
|
arr[ 0 , 1 , 3 ] #结果就是7
|
这下应该懂了些吧,好,再回到transpose()这个函数,它里面就是维度的排序,比如我们后面写的transpose(2,1,0),就是把之前第三个维度转为第一个维度,之前的第二个维度不变,之前的第一个维度变为第三个维度,好那么我们继续拿7这个值来说,之前的索引为[0,1,3],按照我们的转换方法,把之前的第三维度变为第一维度,之前的第一维度变为第三维度,那么现在7的索引就是(3,1,0)
同理所有的数组内的数字都是这样变得,这就是transpose()内参数的变化。
理解了上面,再来理解swapaxes()就很简单了,swapaxes接受一对轴编号,其实这里我们叫一对维度编号更好吧,比如:
1
2
3
4
5
6
7
8
9
10
|
arr.swapaxes( 2 , 1 ) #就是将第三个维度和第二个维度交换
array([[[ 0 , 4 ],
[ 1 , 5 ],
[ 2 , 6 ],
[ 3 , 7 ]],
[[ 8 , 12 ],
[ 9 , 13 ],
[ 10 , 14 ],
[ 11 , 15 ]]])
|
还是那我们的数字7来说,之前的索引是(0,1,3),那么交换之后,就应该是(0,3,1)
多说一句,其实numpy高维数组的切片也是这样选取维度的。
以上这篇对numpy中的transpose和swapaxes函数详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持服务器之家。
原文链接:https://blog.csdn.net/qq1483661204/article/details/70543952