numpy生成数组的方法
多维数组的理解
..........
(a) (b) (c) (d)
简单理解,一维数组就是一个向量,二维数组是一个矩阵,三维数组就是有几个矩阵,四维数组就是有几个这样的三维立方体,如上图,将图a复制4份就变成了图b的二维,将图b复制3份就变成了图c的三维,将图c复制3份就变成了图d的四维,所以将图d复制n份就会变成五维,以此类推。。
多维数组的切片
单维数组的切片是基于索引号,多维数组的切片是基于维度的。比如有一个一维数组:
>>>a = np.arange(9)
>>>print(a)
[0 1 2 3 4 5 6 7 8]
>>>print(a[0:3])
[0 1 2]
>>>print(a[:])
[0 1 2 3 4 5 6 7 8]
使用 [:] 表示从开始到结束的切片,所有的索引值都是从0开始的,切片操作都是左闭右开的区间,比如[0:2]意思是0,1
将一维数组变成二维数组:
>>>a = np.arange(9).reshape(3,3)
>>>print(a)
[[0 1 2]
[3 4 5]
[6 7 8]]
>>>print(a[0,1])
1
二维数组的切片就是选取第几行第几列的值,上述代码取得就是第0行第1列的值
下面生成一个三维数组:
>>>a = np.arange(18).reshape(2,3,3)
>>>print(a)
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]]
>>>print(a[0,1:2,0:2])
[[3 4]]
三维数组的切片就是从维数最高开始选取,a[0,1:2,0:2]中的0表示选取第0个矩阵
,1:2表示选取第0个矩阵的第1行
,0:2表示第0个矩阵的0到1列
。
其中[:]表示某个维度下的所有值,如下图代码:a[0,1,:]中的:表示所有列,a[:,:,:]表示所有矩阵的所有行以及所有列。
>>>a = np.arange(18).reshape(2,3,3)
>>>print(a)
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]]
>>>print(a[0,1,:])
[3 4 5]
>>>print(a[:,:,:])
[[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]]
[[ 9 10 11]
[12 13 14]
[15 16 17]]]
其中多个冒号可以用一个省略号(…)来代替,比如上面的a[:,:,:]可以用a[...]代替。
最后,再补充一点:我们说a[0:1]和a[0]都表示取第0维,那么他们之间有什么区别呢?区别就是当我们写a[0]的时候,取出来的数组会降一维,而a[0:1]保持不变。举个例子,对一个三维数组进行切片操作a[0,1:2,0:2],其中当操作完a[0]的时候数组从三维变成了二维,接着操作a[1:2]数组并不会从二维变成一维,还是保持二维,当然a[0:2]也是继续保持二维,没有降维操作!!!
之前看到过一个很形象的比如,一维数组呢其实就是一条线,二维数组就是一个面,三维数组就是多个面组成的一本书,四维数组就是多本书组成的书架,五维数组就是多个书架,,,至于多维数组的切片也就是从哪个书架上取哪本书,然后翻到哪一页,找到哪一个知识点。
也可以参考
如有错误,还请指正!!!