不论是用numpy或者是tensorflow,在机器学习的过程中常常会用到[]来提取array中的元素,但是再找了很多的资源之后发现并没有比较好的解释
我在尝试之后给出list[]的用法和解析,希望能帮到大家
以这样的数据为例
1 2 3 4 5 6 7 8 9 10 | list1 = np.arange( 24 ).reshape([ 2 , 3 , 4 ]) ‘'‘ [[[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ]] [[ 12 13 14 15 ] [ 16 17 18 19 ] [ 20 21 22 23 ]]] '‘' |
1.[a,b,c]类型
在array中取到了位置[a,b,c]的元素,不多做解释。
1 2 | print (list1[ 1 , 1 , 1 ]) # 17 |
2.[]中含有‘:’符号
只有:时,代表取某一维度的全部元素
:前后有数字时,相当于把那维当做一个list,1:3就代表取索引1,2的元素
其中的关系给出两个例子,大家可以思考其中的原理
1 2 3 4 5 6 7 8 9 10 11 | print (list1[:,:, 1 ]) # 代表取出前两个维度的所有元素,只要第三维度的1索引元素 ‘'‘ [[ 1 5 9 ] [ 13 17 21 ]] '‘' print (list1[:, 1 : 3 , - 1 ]) # 取出第一个维度所有元素,第二个维度的索引1和2的元素,第三个维度倒数第一个的元素 ''' [[ 7 11] [19 23]] ''' |
3.None出现的时候
None是用来增加维度的,在哪里出现就给哪里增加1维
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 | print (list1) print (list1[ None ]) # 相当于在最前面增加一维 print (list1[ None ].shape) ''' [[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]] [[[[ 0 1 2 3] [ 4 5 6 7] [ 8 9 10 11]] [[12 13 14 15] [16 17 18 19] [20 21 22 23]]]] (1, 2, 3, 4) ''' print (list1) print (list1[:,:, None ]) print (list1[:,:, None ].shape) ‘'‘ [[[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ]] [[ 12 13 14 15 ] [ 16 17 18 19 ] [ 20 21 22 23 ]]] [[[[ 0 1 2 3 ]] [[ 4 5 6 7 ]] [[ 8 9 10 11 ]]] [[[ 12 13 14 15 ]] [[ 16 17 18 19 ]] [[ 20 21 22 23 ]]]] ( 2 , 3 , 1 , 4 ) '‘' |
None的作用于np.newaxis的作用是一样的
下面给出一个例子,大家可以体会一下:
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 | print (list1) print (list1[ None ,]) print (list1[ None ,].shape) print (list1[np.newaxis,:]) print (list1[np.newaxis,:].shape) ‘'‘ [[[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ]] [[ 12 13 14 15 ] [ 16 17 18 19 ] [ 20 21 22 23 ]]] [[[[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ]] [[ 12 13 14 15 ] [ 16 17 18 19 ] [ 20 21 22 23 ]]]] ( 1 , 2 , 3 , 4 ) [[[[ 0 1 2 3 ] [ 4 5 6 7 ] [ 8 9 10 11 ]] [[ 12 13 14 15 ] [ 16 17 18 19 ] [ 20 21 22 23 ]]]] ( 1 , 2 , 3 , 4 ) '‘' |
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持IT俱乐部。