python学习笔记(四)之列表,数组各种切片比较X[:,0]、X[:,1]、X[:,:,0]、X[:,:,1]、X[:,m:n]

(一)列表切片

最近从github中下拉别人的python代码学习处理卷积神经网络模型,但是由于自己是个刚上手的小白,对python代码也不是特别熟悉,刚刚入门。在别人的代码中经常会看到列表切片和数组切片,有点混乱,所以就查阅网上各种资料并做了一下比较和总结。如有不对的地方还请各位路过的大神们多多指教。

1 列表索引:list[start : end : step]

(1)检索的时候,结束位置的索引所代表的值不包含在内;
(2)但是start/end位置为空时,表示起始值/结束值都包含在内;
(3) 不指定步长的时候默认步长值为1
(4)step表示索引方向>0为从左往右,<0为从右往左

 my_list[:8:3]
[5, 1, 8]
>>> my_list[:8:2]
[5, 9, 2, 8]
 my_list[6:]
[8, 7, 6]

1.1 正索引,step>0
*
正序索引的时候是从左到右进行检索,结束位置(end)的索引值不算在内。


```>>> my_list=[5,3,9,1,2,0,8,7,6]
>>> my_list[:3:1]
[5, 3, 9]
>>> my_list[3:8:2]
[1, 0, 7]
>>> my_list[4::2]
[2, 8, 6]
>>> my_list[4:]
[2, 0, 8, 7, 6] 

1.2 正索引,step<0
按照起始位置从右往左检索,结束位置(end)索引值不算。start 的值要大于end的值。

>>>my_list=[5,3,9,1,2,0,8,7,6]
>>>my_list[5:1:-2]
[0, 1]
>>> my_list[5:1:-1]
[0, 2, 1, 9]

start 的值要小于end的值时返回为空列表

>>>my_list=[5,3,9,1,2,0,8,7,6]
 >>>my_list[4:8:-1]
[]

1.3 负索引 step>0
Python解释器还使用负索引来标识相对于列表末尾的元素的位置。索引-1标识列表中最后一个元素,-2标识倒数第2个元素等等。

>>>my_list[-9:-3:2]
[5, 9, 2]

1.4 负索引 step<0

>>>my_list[:-4:-1]
[6, 7, 8]

1.5 正负索同时出现 step>0

>>> my_list[-6:6:2]
[1, 0]

1.6正负索引同时出现 step<0

>>> my_list[7:-8:-1]
[7, 8, 0, 2, 1, 9]

1.7 各种 [: : : ] 形式出现

>>>my_list[::1]
[5, 3, 9, 1, 2, 0, 8, 7, 6]
>>> my_list[::-1]
[6, 7, 8, 0, 2, 1, 9, 3, 5]
>>> my_list[:-5:-2]
[6, 8]

(二)数组切片(数组形式,若是一个大列表,可以np.array(list)转成数组)

刚开始接触的时候经常会把数组切片和列表切片弄混,定睛一看。两者的长相还是有点区别的。列表切片没有逗号 “ , ”。而数组切片是用逗号来分割各个维度。并且“:”表示各个维度内的切片,只有:表示取这个维度的全部值

2.1 一维数组
      一维数组也就退化成列表的用法,可以向上回看列表切片索引的用法
2.2 二维数组

(1) x[m,n]是通过numpy库引用数组或矩阵中的某一段数据集的一种写法,
(2)m代表第m维,n代表m维中取第几段特征数据。
2.2.1 x[:,n]
x[:,n]表示在全部数组(维)中取第n个数据,直观来说,x[:,n]就是取所有集合的第n个数据.

import numpy as np
X=np.array([[5,7],[1,2],[7,8],[9,0],[34,56],[7,90],[23,29]])
print(X[:,0])
[ 5  1  7  9 34  7 23]
X=np.array([[5,7],[1,2],[7,8],[9,0],[34,56],[7,90],[23,29]])
print(X[:,1])
[ 7  2  8  0 56 90 29]

2.2.2 x[n,:]
x[n,:]表示在n个数组(维)中取全部数据,直观来说,x[n,:]就是取第n集合的所有数据.

import numpy as np
X=np.array([[5,7],[1,2],[7,8],[9,0],[34,56],[7,90],[23,29]])
print(X[0,:])

2.2.3 x[:,m:n]
x[:,m:n],即取所有数据集的第m到n-1列数据

import numpy as np
X=np.array([[5,7,9,0],[1,25,8,0],[7,8,5,2],[9,0,3,9],[3,4,5,6],[7,9,0,1],[2,3,2,9]])
print(X[:,1:3])
[[ 7  9]
 [25  8]
 [ 8  5]
 [ 0  3]
 [ 4  5]
 [ 9  0]
 [ 3  2]]

2.2.4X[m:n,:]
取二维数组中第m行到第n-1行所有列的数据

import numpy as np
X=np.array([[5,7,9,0],[1,25,8,0],[7,8,5,2],[9,0,3,9],[3,4,5,6],[7,9,0,1],[2,3,2,9]])
print(X[:2,:])
[[ 5  7  9  0]
 [ 1 25  8  0]]
2.3三维数组 X [楼层,行,列]
import numpy as np
x=np.arange(120).reshape(4,5,6)
print(x)
[[[  0   1   2   3   4   5]
  [  6   7   8   9  10  11]
  [ 12  13  14  15  16  17]
  [ 18  19  20  21  22  23]
  [ 24  25  26  27  28  29]]

 [[ 30  31  32  33  34  35]
  [ 36  37  38  39  40  41]
  [ 42  43  44  45  46  47]
  [ 48  49  50  51  52  53]
  [ 54  55  56  57  58  59]]

 [[ 60  61  62  63  64  65]
  [ 66  67  68  69  70  71]
  [ 72  73  74  75  76  77]
  [ 78  79  80  81  82  83]
  [ 84  85  86  87  88  89]]

 [[ 90  91  92  93  94  95]
  [ 96  97  98  99 100 101]
  [102 103 104 105 106 107]
  [108 109 110 111 112 113]
  [114 115 116 117 118 119]]]

可以看成有四层楼,每层按5行6列来摆放椅子。
2.3.1 x[m ,n ,z]表示第一维取m,第二维取n,第三维取z
x[2,4,1]的执行结果为

import numpy as np
x=np.arange(120).reshape(4,5,6)
print(x[2,4,1])
85

2.3.2 x[:,m,n]表示第一维全取,第二维取m,第三维取n

import numpy as np
x=np.arange(120).reshape(4,5,6)
print(x[:,2,5])
[ 17  47  77 107]

2.3.3x[:,m:,n]表示第一维全取,第二维取m及之后的所有值,第三维取n

import numpy as np
x=np.arange(120).reshape(4,5,6)
print(x[:,1:,4])
[[ 10  16  22  28]
 [ 40  46  52  58]
 [ 70  76  82  88]
 [100 106 112 118]]

2.3.4 x[:,m:,:n]表示第一维全取,第二维取m及之后的所有值,第三维取n之前的值

import numpy as np
x=np.arange(120).reshape(4,5,6)
print(x[:,2:,:3])
[[[ 12  13  14]
  [ 18  19  20]
  [ 24  25  26]]

 [[ 42  43  44]
  [ 48  49  50]
  [ 54  55  56]]

 [[ 72  73  74]
  [ 78  79  80]
  [ 84  85  86]]

 [[102 103 104]
  [108 109 110]
  [114 115 116]]]

注:以上数组形式的切片方法,在矩阵中同样适用。但是,若要取某个准确的值时,比如说第一列,第二行这一准确值时,矩阵的话,最好用mat[1,2],而数组的话,既可以用array[1,2],也可以用array[1][2] 。

  1. List item

参考文章:https://blog.csdn.net/u014159143/article/details/80307717
https://blog.csdn.net/guoyang768/article/details/84840658
https://blog.csdn.net/qq_41973536/article/details/82690242

  • 4
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值