numpy中的transpose()用法和计算(没有计算机,我们应该怎么算出来)
1.理解transpose的用法
2.我们应该怎么手写出转换后二维数组,三维数组
前言
我刚开始头脑也没有转过弯来,一直想不明白这个0,1,2轴,因为网上太多说什么可以看做x,y,z轴,然后我越看越不清楚,希望跟我一样不理解的小白也能理解清楚。
第一次写博客,望大佬们勿喷,欢迎评论区一起交流学习
正文
在此之前我们应该先了解一些基本的numpy里面的函数用法,才能更好的理解transpose
shape函数 用来判断几行几列,举个例子:
import numpy as np
arr = np.array([2,3,4]) #里面有3个元素
arr1 = np.array([[1,2,3],[4,5,6]]) #里面有6个元素
print(arr.shape)
print(arr1.shape)
#输出:
#(3,)
#(2, 3)
1.从中可以看出 shape返回的数字第1个代表着行,第2个代表着列,代码中arr.shape返回的是类似Python里的元祖,只有一个数字的时候要在数字后面加上一个逗号(3,)---->实际相当于(1,3)一行三列
2.乘积之和等于数组里面的元素个数
reshape函数 用来生成几行几列的数组,给入的参数乘积必须要等于数组里面的个数,否则会报错。例如:arr = np.arange(12).reshape(4,3) 12=4*3
生成一个四行三列的有序数组
正式进入transpose函数的用法:
#二维数组的transpose用法很简单,就是x,y轴互换一下,相当于数学上的矩阵转置
arr1 = np.array([[1,2,3],[4,5,6]]) #里面有6个元素
print(arr1)
[[1 2 3]
[4 5 6]]
print(arr1.shape) #输出 2行 3列
print(arr1.transpose()) #进行转置,默认传参(1,0)
[[1 4]
[2 5]
[3 6]]
print(arr1.transpose(1,0)) #会发现和上面一样
[[1 4]
[2 5]
[3 6]]
二维数组使用transpose,简单来说就是x轴,y轴互相转换一下,也就相当于0轴,1轴互相转换一下。
三维数组使用transpose函数,下面我希望能通过我的理解让不理解的小白跟我一起理解下来
import numpy as np
#先产生一个 用reshape产生一个 2组 2维数组,2维数组里面有3个元素
arr = np.arange(24).reshape(2,4,3)
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]]
print(arr.shape) #是一个(2,4,3)
!!重点来了 上面这个2,4,3你要分别把它看作0轴,1轴,2轴,现在我们对arr这个数组进行transpose,默认传参(2,1,0),轴的顺序原本是0,1,2,就相当于我的2轴和1轴互换了位置,让我们继续看代码
new_arr = arr.transpose(2,1,0)
print(new_arr) #你们猜一猜transpose转换后是几组几行几列
[[[ 0 12]
[ 3 15]
[ 6 18]
[ 9 21]]
[[ 1 13]
[ 4 16]
[ 7 19]
[10 22]]
[[ 2 14]
[ 5 17]
[ 8 20]
[11 23]]]
print(new_arr.shape) #(3,4,2) 你答对了吗?
相比之前(2,3,4)—》变到了(4,3,2),是不是2和4互换了位置,也就是所谓的0轴和2轴互换了位置,生成了一个4组,3行,2列的新数组
通过了上面的例子,应该已经掌握了,轴互换怎么计算新生成的数组了吧,。
假设我们不使用计算机,我们怎么写出新生成的数组呢?
原数组 2组 4行 3列
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
[[12 13 14]
[15 16 17]
[18 19 20]
[21 22 23]]]
经过了 transpose 变成了 3组 4行 2列
好好观察一下规律 聪明的你一定能看出来怎么写的 哈哈哈
[[[ 0 12]
[ 3 15]
[ 6 18]
[ 9 21]]
[[ 1 13]
[ 4 16]
[ 7 19]
[10 22]]
[[ 2 14]
[ 5 17]
[ 8 20]
[11 23]]]
相信大家已经理解的差不多了,快快一起实践起来吧。