之前自學過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.csdn.net/z13653662052/article/details/78010654