0%

2020-07-26-python切片疑惑解析

Python中对于数组和列表进行切片操作是很频繁的,我主要简单总结一下常用集中索引化方式

一维: [ : n]、[m : ] 、[-1]、[::-1]

[m : ] :代表列表中的第m项到最后一项 (从0开始)

[ : n] :代表列表中的第0项到第n-1项 (含左不含右)

[-1]:取最后一个元素

[::-1]:取从后向前(相反)的元素 (倒序)

1
2
3
4
5
6
7
8
import numpy as np

X = np.array([1,2,3,4,5,6,7,8] )
print(X.shape)
print('\n')
print(X[3:])
print(X[:7])
print(X[::-1][:3]) # 在进行了[::-1]之后得到倒序数组,再取[:3]

结果如下:

1
2
3
4
(8,)
[4 5 6 7 8]
[1 2 3 4 5 6 7]
[8,7,6]

二维: X[:,0] 、X[:,1] 、 X[:, m:n]

X[:,0]是numpy中数组的一种写法,表示对一个二维数组,取该二维数组第一维中的所有数据,第二维中取第0个数据,直观来说

X[:,0]:取第二维(所有行)的第0个数据,就是第0列

X[:,1] :取第二维(所有行)的第1个数据,就是第1列

X[:, m:n],即取所有数据的第m到n-1列数据,含左不含右

示例如下:

1
2
3
4
5
6
import numpy as np

X = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11],[12,13,14],[15,16,17],[18,19,20]])
print(X.shape)
print('\n')
print (X[:,1:3])

结果如下:

1
2
3
4
5
6
7
8
9
(7, 3)

[[ 1 2]
[ 4 5]
[ 7 8]
[10 11]
[13 14]
[16 17]
[19 20]]

三维 X[:,:,0]、X[:,:,1]、X[:,:,m:n]

类比于二维,原理相同

X[:,:,0]:取第三维矩阵中第0列的所有数据

X[:,:,1]:取第三维矩阵中第1列的所有数据

X[:,:,m:n]:取第三维矩阵中第m列到第n-1列的所有数据

1
2
3
注:shape(9,5,2)指的是最外层有9个括号,每个括号里嵌套5个括号,在5个括号里又每个有2个元素

判断的时候先先出数组的shape,根据shape进行判断
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
# !usr/bin/env python
# encoding:utf-8
from __future__ import division

import numpy as np


def simple_test():
'''
简单的小实验
'''
data_list = [[1, 2, 3], [1, 2, 1], [3, 4, 5], [4, 5, 6], [5, 6, 7], [6, 7, 8], [6, 7, 9], [0, 4, 7], [4, 6, 0],[2, 9, 1], [5, 8, 7], [9, 7, 8], [3, 7, 9]]
# data_list.toarray()
data_list = np.array(data_list)
print('X[:,0]结果输出为:')
print( data_list[:, 0])

print( 'X[:,1]结果输出为:')
print( data_list[:, 1])

print('X[:,m:n]结果输出为:')

print( data_list[:, 0:1])

data_list = [[[1, 2], [1, 0], [3, 4], [7, 9], [4, 0]], [[1, 4], [1, 5], [3, 6], [8, 9], [5, 0]],
[[8, 2], [1, 8], [3, 5], [7, 3], [4, 6]],
[[1, 1], [1, 2], [3, 5], [7, 6], [7, 8]], [[9, 2], [1, 3], [3, 5], [7, 67], [4, 4]],
[[8, 2], [1, 9], [3, 43], [7, 3], [43, 0]],
[[1, 22], [1, 2], [3, 42], [7, 29], [4, 20]], [[1, 5], [1, 20], [3, 24], [17, 9], [4, 10]],
[[11, 2], [1, 110], [3, 14], [7, 4], [4, 2]]]
data_list = np.array(data_list)
print(data_list.shape)
print('X[:,:,0]结果输出为:')

print( data_list[:, :, 0])

print('X[:,:,1]结果输出为:')

print(data_list[:, :, 1])

print('X[:,:,m:n]结果输出为:')

print( data_list[:, :, 0:1])



if __name__ == '__main__':
simple_test()

部分结如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
X[:,:,0]结果输出为:
[[ 1 1 3 7 4]
[ 1 1 3 8 5]
[ 8 1 3 7 4]
[ 1 1 3 7 7]
[ 9 1 3 7 4]
[ 8 1 3 7 43]
[ 1 1 3 7 4]
[ 1 1 3 17 4]
[11 1 3 7 4]]
X[:,:,1]结果输出为:
[[ 2 0 4 9 0]
[ 4 5 6 9 0]
[ 2 8 5 3 6]
[ 1 2 5 6 8]
[ 2 3 5 67 4]
[ 2 9 43 3 0]
[ 22 2 42 29 20]
[ 5 20 24 9 10]
[ 2 110 14 4 2]]

[start:end:step]

start:开始索引;end:结束索引;step:步长(步长为正时,从左到右索引,正序取值;步长为负时,从右到左索引,倒序取值)

[::2] 步长为2

[3:7:2] 第3个元素开始,第6个元素结束,步长为2

参考

https://blog.csdn.net/Together_CZ/article/details/79593952

-------------本文结束感谢阅读-------------
卑微博主,在线求赏