English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Fatias do Array do NumPy

Fatias de array

O cortar em Python significa levar elementos de um índice给定 para outro índice给定.
Nós passamos fatias assim em vez de índices:[start:end].
Também podemos definir o passo, conforme mostrado a seguir:[start:end:step].
Se não passarmos start, é considerado 0.
Se não passarmos end, é considerado o comprimento do array dentro da dimensão.
Se não passarmos step, é considerado 1.

Vamos olhar para um exemplo específico

>>> import numpy as np
>>> arr = np.array([1, 2, 3, 4, 5, 6, 7,np.nan,
>>> print(arr[1:5)] # Cortar o índice 1 到索引 5 ]) # Agora, vamos imprimir os valores maiores
[2 3 4 5]
>>> print(arr[4]:) # Cortar o array de índices 4 até o final dos elementos
[5 6 7]
>>> print(arr[:4)] # Cortar do início até o índice 4(não incluído) elementos
[1 2 3 4]

负裁切

使用减号运算符从末尾开始引用索引:

从末尾开始的索引 3 到末尾开始的索引 1,对数组进行裁切:

>>> import numpy as np
>>> arr = np.array([1, 2, 3, 4, 5, 6, 7,np.nan,
>>> print(arr[-3:-1,np.nan,
[5 6]

STEP步长

使用 step 值确定裁切的步长

>>> import numpy as np
>>> arr = np.array([1, 2, 3, 4, 5, 6, 7,np.nan,
>>> print(arr[1:5:2]) # 从索引 1 到索引 5,返回相隔的元素
[2 4]
>>> print(arr[::2])# 返回数组中相隔的元素
[1 3 5 7]

裁切 2-D 数组

从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片:

>>> import numpy as np
>>> arr = np.array([1, 2, 3, 4, 5],6, 7, 8, 9, 10]]
>>> print(arr[1, 1:4]) # 从第二个元素开始,对从索引 1 到索引 4(不包括)的元素进行切片
[7 8 9]
>>> print(arr[2, 2]) # 从两个元素中返回索引 2
[3 8]
>>> print(arr[2, 1:4]) # 从两个元素裁切索引 1 到索引 4(不包括),这将返回一个 2-D 数组
[[2 3 4]
 [7 8 9]]

NumPy 比一般的 Python 序列提供更多的索引方式。除了之前看到的用整数和切片的索引外,数组可以由整数数组索引、布尔索引及花式索引。

整数数组索引

以下实例获取数组中(0,0),(1,1)和(2,0)位置处的元素。

>>> import numpy as np
>>> x = np.array([1, 2],3, 4],5, 6]] 
>>> y = x[[1,2],1,0]] 
>>> print(y)
[1 4 5]

以下实例获取了 4X3 数组中的四个角的元素。行索引是 [3,3]],而列索引是 [2]],而列索引是 [2]]。

>>> import numpy as np
>>> x = np.array([ 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([3,3]]
>>> cols = np.array([2],[0,2]]
>>> y = x[rows,cols]
>>> print(y)
[[ 0 2]
 [ 9 11]]

返回的结果是包含每个角元素的 ndarray 对象。
可以借助切片 : 或 … 与索引数组组合。如下面实例:

>>> 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]]

布尔索引

我们可以通过一个布尔数组来索引目标数组。
布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。
以下实例获取大于 5 的元素:

>>> import numpy as np
>>> x = np.array([ 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]) # 现在我们会打印出大于 5 ]) # Agora, vamos imprimir os valores maiores
[ 6 7 8 9 10 11]

elementos

>>> import numpy as np
A seguir, mostramos um exemplo que usa ~ (operador de complemento) para filtrar NaN. 1,2>>> a = np.array([np.nan,3,4,5,np.nan, 
])
[ 1.j 2.j 3.j 4.j 5>>> print(a[~np.isnan(a)])

j])

>>> import numpy as np
A seguir, mostramos como filtrar elementos não complexos de um array.1, 2+6>>> a = np.array([ 5, 3.j5+5j, 
j])
[2>>> print(a[np.iscomplex(a)])+6.0 3.j5+5.

.j]

Indexação Estilosa
A indexação estilosa usa arrays de inteiros para indexar. A indexação estilosa usa arrays de inteiros para indexar.
A indexação estilosa é diferente da fatia, pois sempre copia os dados para um novo array.

>>> import numpy as np
>>> x=np.arange(32).reshape((8,4])
>>> print(x[[4,2,1,7]) # Passar arrays de índices em ordem
[[16 17 18 19]
 [ 8 9 10 11]
 [ 4 5 6 7]
 [28 29 30 31]]
>>> print(x[[-4,-2,-1,-7]) # Passar arrays de índices invertidos
[[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]) # Passar múltiplos arrays de índices (usar np.ix_)
[[ 4 7 5 6]
 [20 23 21 22]
 [28 31 29 30]
 [ 8 11 9 10]]