之前自学过python的相关语法内容,知识点过了一遍,发现印象不深刻,写个博文加深印象。
1.一维字符串的截取操作
初始化一个个字符串,如下
>>> a = list((1,2,3,4,5,6,7,8,9,10,11,12,13,14))
>>> a
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> a[:]
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> a[1:4]
[2, 3, 4]
>>> a[:4]
[1, 2, 3, 4]
>>> a[4:]
[5, 6, 7, 8, 9, 10, 11, 12, 13, 14]
>>> a[6:-1]
[7, 8, 9, 10, 11, 12, 13]
//这里的-1表示从尾部开始数起的
>>> a[-3:-1]
[12, 13] //感受下
>>> a[::2]
[1, 3, 5, 7, 9, 11, 13]
包含两个冒号的样式是怎么回事呢?
第一个冒号隔开的这两个部分和前面的意思是一样的,就是指定数组中间元素的区间,后面那个部分则是指的一个步长
>>> a[::3]
[1, 4, 7, 10, 13] //再来感受下
>>> a[::-1]
[14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
最后一个为什么呢?
>>> a[1:8:-1]
[]
>>> a[8:1:-1]
[9, 8, 7, 6, 5, 4, 3]
这样就很明白了,最后步长为-1表示方向。前面也有一个方向,a[1:8]表示从1到8,是正向;a[8:1]表示从8到1,是负向。步长为正,表明正向,步长为负,表明负向。
2.多维情况
多维的数组,我们借助下numpy这个工具包来看看。
不多说,首先初始化!
>>> a = np.arange(16).reshape(4,4)
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> a[1:3, 2:5]
array([[ 6, 7],
[10, 11]])
>>> a[1:4, 2:5]
array([[ 6, 7],
[10, 11],
[14, 15]])
>>> a[2:4, 2:5]
array([[10, 11],
[14, 15]])
>>> a[2:4, 1:5]
array([[ 9, 10, 11],
[13, 14, 15]])
我们将逗号前面的称作N1,后面的称作N2。从以上的例子来看,N1切片的位置是行,N2切片的位置是列,a[1:3, 2:5],1:3表示行取大于1小于等于3的行,2:5表示列取大于2小于等于5的列。其它例子类似。
同理,如果把1:3改成1:3:2,和一维的意义类似,负数也是一样。再看下面的例子
>>> a
array([[ 0, 1, 2, 3],
[ 4, 5, 6, 7],
[ 8, 9, 10, 11],
[12, 13, 14, 15]])
>>> a[:, None]
array([[[ 0, 1, 2, 3]],
[[ 4, 5, 6, 7]],
[[ 8, 9, 10, 11]],
[[12, 13, 14, 15]]])
>>> a[:, None].shape
(4, 1, 4)
>>> a.shape
(4, 4)
为什么列的参数改成None,输出的shape都变了,这里大家要知道,None代表新增加一个维度,它有一个别称叫newaxis,大家可以输出一下numpy.newaxis就知道了,那么这个别称应该顾名思义了吧。再看下面的东西
>>> print np.newaxis
None
>>> a[:, : , None].shape
(4, 4, 1)
>>> a[:, None].shape
(4, 1, 4)
>>> a[..., None].shape
(4, 4, 1)
>>> a[None,:].shape
(1, 4, 4)
可以看到None放在哪一维,就会在哪一维上出现新的维度。同时可以看到三个点和两个连续的点的效果一样。
参考文献:
1.http://shmilyaw-hotmail-com.iteye.com/blog/1782733
2.http://blog.youkuaiyun.com/z13653662052/article/details/78010654