Python中數(shù)組切片的用法實(shí)例詳解
一、python中“::-1”代表什么?
在Python中::-1
表示將字符或數(shù)字倒序輸出
(也稱【反轉(zhuǎn)】)。
舉個(gè)栗子,當(dāng)line = "abcde"時(shí),使用語句line[::-1]
,最后的運(yùn)行結(jié)果為:‘edcba’。
二、python中“:”的用法
在Python中a[i:j]
表示復(fù)制字符串或數(shù)字從a[i]到a[j-1]
(也稱【切片】)。 當(dāng)切片中,i
或 j
的位置被“:
”替換時(shí),切片結(jié)果如下:
- 當(dāng)
i
缺省時(shí),默認(rèn)為i=0
,即 a[:3]相當(dāng)于 a[0:3]; - 當(dāng)
j
缺省時(shí),默認(rèn)為j=len(a)
, 即a[1:]相當(dāng)于a[1:10]; - 當(dāng)
i,j
都缺省時(shí),a[::]
就相當(dāng)于完整復(fù)制一份a。
備注:上例中,假設(shè) a = [0,1,2,3,4,5,6,7,8,9]。
參考:python中::-1代表什么?
在Python中::-1表示將字符或數(shù)字倒序輸出。舉個(gè)栗子,當(dāng)line = "abcde"時(shí),使用語句line[::-1],最后的運(yùn)行結(jié)果為:'edcba'。下面請(qǐng)看詳細(xì)解釋。
一、反轉(zhuǎn)
::-1涉及到將數(shù)字或字符倒序輸出
二、詳解
1、i:j
a = [0,1,2,3,4,5,6,7,8,9]
b = a[i:j] 表示復(fù)制a[i]到a[j-1],以生成新的list對(duì)象
b = a[1:3] 那么,b的內(nèi)容是 [1,2]
當(dāng)i缺省時(shí),默認(rèn)為0,即 a[:3]相當(dāng)于 a[0:3]
當(dāng)j缺省時(shí),默認(rèn)為len(alist), 即a[1:]相當(dāng)于a[1:10]
當(dāng)i,j都缺省時(shí),a[:]就相當(dāng)于完整復(fù)制一份a了舉個(gè)栗子:
line = "abcde"
line[:-1]
結(jié)果為:'abcd'2、::-1
b = a[i:j:s]這種格式呢,i,j與上面的一樣,但s表示步進(jìn),缺省為1.
所以a[i:j:1]相當(dāng)于a[i:j]
當(dāng)s<0時(shí),i缺省時(shí),默認(rèn)為-1. j缺省時(shí),默認(rèn)為-len(a)-1
所以a[::-1]相當(dāng)于 a[-1:-len(a)-1:-1],也就是從最后一個(gè)元素到第一個(gè)元素復(fù)制一遍。所以你看到一個(gè)倒序的東東。舉個(gè)栗子:
line = "abcde"
line[::-1]
結(jié)果為:'edcba'
line[:-1]其實(shí)就是去除了這行文本的最后一個(gè)字符(換行符)后剩下的部分。實(shí)際上問題不難,你自己動(dòng)手運(yùn)行一下就會(huì)非常清楚。
三、python中數(shù)組切片
1、NumPy 數(shù)組正切片的規(guī)則:
python 中【切片】的意思是將元素從一個(gè)給定的索引帶到另一個(gè)給定的索引。
- 我們像這樣傳遞切片而不是索引:
[start:end]
。 - 我們還可以定義
步長(zhǎng)
,如下所示:[start:end:step]
。
備注:
如果我們不傳遞 start,則將其視為 0。如果我們不傳遞 end,則視為該維度內(nèi)數(shù)組的長(zhǎng)度。如果我們不傳遞 step,則視為 1。
numpy中一維數(shù)組切片:
a=np.array([1,2,3,4,5]) print(a) >>> array([1, 2, 3, 4, 5]) # 切片 print(a[0])#查詢 >>> 1 print(a[1:3])#切片 >>> [2 3]
numpy中二維數(shù)組切片:
a = np.array([ [1,2,3,4], [5,6,7,8], [9,10,11,12] ]) print(a[0,3])#第一行,第四列 >>> 4 print(a[:,3])#第四列 >>> [ 4 8 12] print(a[0,:])#第一行 >>> [1 2 3 4] """ 對(duì)數(shù)組使用均值函數(shù)mean() """ print(a.mean(axis=1))#計(jì)算同一列下,每一行各數(shù)字的平均值 >>> [ 2.5 6.5 10.5] print(a.mean(axis=0))#計(jì)算同一行下,每一列各數(shù)字的平均值 >>> [5. 6. 7. 8.] import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) print(arr[1:5]) # 裁切索引 1 到索引 5(不包括)的元素 >>> [2 3 4 5] print(arr[4:]) # 裁切數(shù)組中索引 4 到結(jié)尾的 >>> [5 6 7] print(arr[:4]) # 裁切從開頭到索引 4(不包括)的元素 >>> [1 2 3 4]
2、NumPy 數(shù)組的負(fù)切片的規(guī)則:
使用減號(hào)運(yùn)算符從末尾開始引用索引:[-start:-end]
。
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) # 從末尾開始的索引 3 到末尾開始的索引 1,對(duì)數(shù)組進(jìn)行切片: print(arr[-3:-1]) >>> [5 6]
3、NumPy 數(shù)組的使用【STEP步長(zhǎng)】切片的規(guī)則:
使用 step 值確定切片的步長(zhǎng):[start: end: step]
。
import numpy as np arr = np.array([1, 2, 3, 4, 5, 6, 7]) print(arr[1:5:2]) # 從索引 1 到索引 5,返回相隔的元素 >>> [2 4] print(arr[::2])# 返回?cái)?shù)組中相隔的元素 >>> [1 3 5 7]
3、NumPy 數(shù)組中 2-D 數(shù)組的切片規(guī)則:
從第二個(gè)元素開始,對(duì)從索引 1 到索引 4(不包括)的元素進(jìn)行切片。 結(jié)果的示例如下:
import numpy as np arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) print(arr[1, 1:4]) # 從第二個(gè)元素開始,對(duì)從索引 1 到索引 4(不包括)的元素進(jìn)行切片 >>> [7 8 9]
NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整數(shù)和切片的索引外,數(shù)組可以由整數(shù)數(shù)組索引、布爾索引及花式索引。
三、numpy中的整數(shù)數(shù)組索引
numpy中的整數(shù)數(shù)組索引的切片規(guī)則:
以下實(shí)例獲取數(shù)組中(0,0),(1,1)和(2,0)位置處的元素。
import numpy as np x = np.array([[1,2],[3,4],[5,5]]) y = x[[0,1,2],[0,1,0]] print(y) >>> [1 4 5]
x = np.array([[0,1,2],[3,4,5],[6,7,8],[9,10,11]]) x >>> array([[ 0, 1, 2], [ 3, 4, 5], [ 6, 7, 8], [ 9, 10, 11]]) # 切片模式一:輸出結(jié)果寫入單列表 rows = np.array([0,3,0,3]) cols = np.array([0,0,2,2]) y = x[rows,cols] print(y) >>> [ 0 9 2 11] # 切片模式二:輸出結(jié)果寫入二維數(shù)組 rows = np.array([[0,0],[3,3]]) cols = np.array([[0,2],[0,2]]) y = x[rows,cols] print(y) >>> [[ 0 2] [ 9 11]] # 切片模式二:輸出結(jié)果寫入2*3的數(shù)組 rows = np.array([[0,0,1],[3,2,3]]) cols = np.array([[0,2,1],[0,1,2]]) y = x[rows,cols] print(y) >>> array([[0, 2, 1], [0, 1, 2]])
四、numpy中借助【切片 : 或 …與索引數(shù)組】組合進(jìn)行復(fù)雜切片
借助切片 : 或 … 與索引數(shù)組組合。如下面實(shí)例:
a = np.array([[1,2,3],[4,5,6],[7,8,9]]) a >>> array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) b = a[1:3,1:3] b >>> array([[5, 6], [8, 9]]) c = a[1:3,[1,2]] c >>> array([[5, 6], [8, 9]]) d = a[...,1:] # arr[..., 1] 等價(jià)于 arr[:, :, 1] d >>> array([[2, 3], [5, 6], [8, 9]])
五、布爾索引
我們可以通過一個(gè)布爾數(shù)組來索引目標(biāo)數(shù)組。
布爾索引通過布爾運(yùn)算(如:比較運(yùn)算符)來獲取符合指定條件的元素的數(shù)組。
一、以下實(shí)例獲取大于 5 的元素: import numpy as np x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]]) print (x) >>> [[ 0 1 2] [ 3 4 5] [ 6 7 8] [ 9 10 11]] print (x[x > 5]) # 現(xiàn)在我們會(huì)打印出大于 5 的元素 >>> [ 6 7 8 9 10 11] 二、以下實(shí)例使用了 ~(取補(bǔ)運(yùn)算符)來過濾 NaN。 import numpy as np a = np.array([np.nan, 1,2,np.nan,3,4,5]) print (a[~np.isnan(a)]) >>> [ 1. 2. 3. 4. 5.] 三、以下實(shí)例演示如何從數(shù)組中過濾掉非復(fù)數(shù)元素。 import numpy as np a = np.array([1, 2+6j, 5, 3.5+5j]) print (a[np.iscomplex(a)]) >>> [2.0+6.j 3.5+5.j]
六、花式索引
花式索引指的是利用整數(shù)數(shù)組進(jìn)行索引。
花式索引根據(jù)索引數(shù)組的值作為目標(biāo)數(shù)組的某個(gè)軸的下標(biāo)來取值。
- 對(duì)于使用一維整型數(shù)組作為索引,如果目標(biāo)是一維數(shù)組,那么索引的結(jié)果就是對(duì)應(yīng)位置的元素;
- 如果目標(biāo)是二維數(shù)組,那么就是對(duì)應(yīng)下標(biāo)的行。
import numpy as np x=np.arange(32).reshape((8,4)) print (x[[4,2,1,7]]) # 傳入順序索引數(shù)組 >>> [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]] print (x[[-4,-2,-1,-7]]) # 傳入倒序索引數(shù)組 >>> [[16 17 18 19] [24 25 26 27] [28 29 30 31] [ 4 5 6 7]] print (x[np.ix_([1,5,7,2],[0,3,1,2])]) # 傳入多個(gè)索引數(shù)組(要使用np.ix_) >>> [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]
原理:
np.ix_函數(shù)就是輸入兩個(gè)數(shù)組,產(chǎn)生笛卡爾積的映射關(guān)系
舉個(gè)例子:
將輸入數(shù)組[1,5,7,2]和數(shù)組[0,3,1,2]產(chǎn)生笛卡爾積,就是得到(1,0),(1,3),(1,1),(1,2);(5,0),(5,3),(5,1),(5,2);(7,0),(7,3),(7,1),(7,2);(2,0),(2,3),(2,1),(2,2);
就是按照坐標(biāo)(1,0),(1,3),(1,1),(1,2)取得 x所對(duì)應(yīng)的元素4,7,5,6,(5,0),(5,3),(5,1),(5,2)取得 x 所對(duì)應(yīng)的元素20,23,21,22…以此類推。
import numpy as np x=np.arange(32).reshape((8,4)) print (x[np.ix_([1,5,7,2],[0,3,1,2])]) >>> [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]
總結(jié)
到此這篇關(guān)于Python中數(shù)組切片的用法詳解的文章就介紹到這了,更多相關(guān)Python數(shù)組切片用法內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
PyQt+socket實(shí)現(xiàn)遠(yuǎn)程操作服務(wù)器的方法示例
這篇文章主要介紹了PyQt+socket實(shí)現(xiàn)遠(yuǎn)程操作服務(wù)器的方法示例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2019-08-0820個(gè)Python中正則表達(dá)式的應(yīng)用與技巧小結(jié)
正則表達(dá)式是一種用來匹配字符串的模式,它可以在文本中搜索和匹配特定的字符串模式,本文我們將探討?Python?中?re?模塊的應(yīng)用和一些技巧,希望可以幫助您更好地理解和利用正則表達(dá)式2024-04-04Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作
這篇文章主要介紹了Python jieba 中文分詞與詞頻統(tǒng)計(jì)的操作,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-03-03通過python調(diào)用adb命令對(duì)App進(jìn)行性能測(cè)試方式
這篇文章主要介紹了通過python調(diào)用adb命令對(duì)App進(jìn)行性能測(cè)試方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2020-04-04Python中關(guān)于matplotlib圖片的灰度處理方式
這篇文章主要介紹了Python中關(guān)于matplotlib圖片的灰度處理方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-08-08