先来简单总结一下这几个函数np.transpose,np.tile(),np.newaxis
一、np.transpose()
主要参考:0岁的数据分析师的博文,知乎回答
1、“.T”主要适用于一维二维数组,略
2、对于多维数组,我们拿三维数组来看一下。
转置格式为np.transpose(array,tuple)或者array.transpose(tuple),其实这个tuple表示的是对array的shape进行哪几个维度的转置,比如一个三维数组的shape为(2,3,4),进行(1,0,2)的transpose之后,就会互换前两个维度,第三个维度不变,然后shape就变成了(3,2,4).
Example:
创建一个2*3*4的三维矩阵
>>> arr1
array([[[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11]],
[[12, 13, 14, 15],
[16, 17, 18, 19],
[20, 21, 22, 23]]])
>>> arr1.shape
(2, 3, 4)
我们进行转置一些看一下shape的变化是不是和前面讨论的一样
>>> arr1.transpose((1,0,2)).shape
(3, 2, 4)
好,现在看到我们的讨论是成立的,那么在转置之后具体进行了什么操作我们再来看一下
>>> arr1.transpose((1,0,2))
array([[[ 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维和1维进行转置,第二维不变,将二维看成一个整体
# 将数组看成如下
arr1 = [
[a1,a2,a3]
[a4,a5,a6]
]
# 转置之后为
arr1.transpose((1,0,2)) = [
[a1,a4]
[a2,a5]
[a3,a6]
]
# 将a1到a6带入得到:
array([[[ 0, 1, 2, 3],
[12, 13, 14, 15]],
[[ 4, 5, 6, 7],
[16, 17, 18, 19]],
[[ 8, 9, 10, 11],
[20, 21, 22, 23]]])
二、np.tile()
函数格式为np.title(a,reps)
Example:
reps传入只有一个参数默认进行横向复制
>>> b = np.array([[1,2],[3,4]])
>>> b
array([[1, 2],
[3, 4]])
>>> np.tile(b,2)
array([[1, 2, 1, 2],
[3, 4, 3, 4]])
reps传入列表或者元组表示进行纵横方向分别复制
>>> np.tile(b,[2,3]) # 纵向复制两次,横向复制三次
[3, 4, 3, 4, 3, 4],
[1, 2, 1, 2, 1, 2],
[3, 4, 3, 4, 3, 4]])
三、np.newaixs
np.newaxis表示插入一个新的维度
1、一维度
>>> a
array([0, 1, 2, 3, 4])
>>> a[:,np.newaxis]
array([[0],
[1],
[2],
[3],
[4]])
2、多维度
首先回顾一下对多为数组的切片操作
>>> a = np.arange(12).reshape((2,2,3))
>>> a
array([[[ 0, 1, 2],
[ 3, 4, 5]],
[[ 6, 7, 8],
[ 9, 10, 11]]])
>>> a[0,:,:]
array([[0, 1, 2],
[3, 4, 5]])
>>> a[1,:,:]
array([[ 6, 7, 8],
[ 9, 10, 11]])
>>> a[:,0,:]
array([[0, 1, 2],
[6, 7, 8]])
>>> a[:,1,:]
array([[ 3, 4, 5],
[ 9, 10, 11]])
>>> a[:,:,0]
array([[0, 3],
[6, 9]])
>>> a[:,:,1]
array([[ 1, 4],
[ 7, 10]])
>>> a[:,:,2]
array([[ 2, 5],
[ 8, 11]])
好了,到这就都散了吧
多维数组的增加新维度我还没遇到过... .. .
The end.