English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Nel Python, il taglio significa portare gli elementi da un indice dato a un altro indice dato.
Passiamo una fetta invece di un indice, come segue:[start:end].
Possiamo definire anche lo step, come segue:[start:end:step].
Se non si passa start, viene considerato 0.
Se non si passa end, viene considerata la lunghezza dell'array nella dimensione.
Se non si passa step, viene considerato 1.
Ecco un esempio di operazione specifica
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5]) # Tagliare gli elementi dall'indice 1 all'indice 5 [2 3 4 5] >>> print(arr[4:]) # Tagliare l'array dall'indice 4 alla fine [5 6 7] >>> print(arr[:4]) # Tagliare gli elementi dal principio all'indice 4 (esclusi) [1 2 3 4]
Usare l'operatore meno per riferirsi agli indici dalla fine:
Tagliare l'array dall'indice 3 all'indice 1 partendo dalla fine:
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[-3:-1]) [5 6]
Determinare la lunghezza del taglio utilizzando il valore step
>>> import numpy as np >>> arr = np.array([1, 2, 3, 4, 5, 6, 7]) >>> print(arr[1:5:2]) # Restituire gli elementi a intervalli da 1 a 5 [2 4] >>> print(arr[::2]) # Restituire gli elementi a intervalli [1 3 5 7]
Tagliare gli elementi dall'indice 1 all'indice 4 (esclusi) partendo dal secondo elemento:
>>> import numpy as np >>> arr = np.array([[1, 2, 3, 4, 5], [6, 7, 8, 9, 10]]) >>> print(arr[1, 1:4]) # Tagliare gli elementi dall'indice 1 all'indice 4 (esclusi) partendo dal secondo elemento [7 8 9] >>> print(arr[0:2, 2]) # Restituire l'indice 2 tra due elementi [3 8] >>> print(arr[0:2, 1:4]) # Tagliare gli indici 1 a 4 (esclusi), il che restituirà un array 2-D [[2 3 4] [7 8 9]
NumPy offre più modi di accesso agli indici rispetto a una sequenza comune di Python. Oltre agli indici con numeri interi e alle fette viste in precedenza, l'array può essere indicizzato da un array di numeri interi, da un'indice booleano e da un'indice flessibile.
Esempio seguente recupera gli elementi alle posizioni (0,0), (1,1) e (2,0) dell'array.
>>> import numpy as np >>> x = np.array([[1, 2], [3, 4], [5, 6]]) >>> y = x[[0, 1, 2], [0, 1, 0]] >>> print(y) [1 4 5]
Esempio seguente recupera gli elementi degli angoli di una matrice 4x3. Gli indici di riga sono [0, 0] e [3, 3], mentre gli indici di colonna sono [0, 2] e [0, 2].
>>> 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] >>> rows = np.array([[0, 0], [3, 3]]) >>> cols = np.array([[0, 2], [0, 2]]) >>> y = x[rows, cols] >>> print(y) [[0 2] [9 11]
Il risultato è un oggetto ndarray che contiene gli elementi degli angoli di ciascun lato.
Possiamo utilizzare tagli : o ... con array di indici per combinare. Ecco un esempio:
>>> import numpy as np >>> a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]]) >>> b = a[1:3, 1:3] >>> c = a[1:3, [1, 2]] >>> d = a[..., 1:] >>> print(b) [[5 6] [8 9] >>> print(c) [[5 6] [8 9] >>> print(d) [[2 3] [5 6] [8 9]
Possiamo utilizzare un array booleano per indicizzare l'array di destinazione.
L'indice booleano utilizza operazioni booleane (come: operatori di confronto) per ottenere un array di elementi che soddisfano le condizioni specificate.
Esempio seguente recupera gli elementi maggiori di 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]) # Ora stampiamo gli elementi maggiori di 5 [6 7 8 9 10 11]
L'esempio seguente utilizza ~ (operatore di complemento) per filtrare 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.]
Esempio seguente dimostra come filtrare gli elementi non complessi da un array.
>>> 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]
L'indice elegante utilizza array di interi per l'indizione.
L'indice elegante si basa sull'uso di array di interi come indici per estrarre valori da un array di destinazione.
L'indice elegante è diverso dal taglio, poiché copia sempre i dati in un nuovo array.
>>> import numpy as np >>> x=np.arange(32).reshape((8,4)) >>> print (x[[4,2,1,7]]) # 传入顺序索引数组 [[16 17 18 19] [ 8 9 10 11] [ 4 5 6 7] [28 29 30 31]] >>> print (x[[-4,-2,-1,-7]]) # 传入倒序索引数组 [[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])]) # 传入多个索引数组(要使用np.ix_) [[ 4 7 5 6] [20 23 21 22] [28 31 29 30] [ 8 11 9 10]]