NumPy ndarray 对象可以使用 Python x[obj] 语法进行索引,其中 x 是数组。 numpy 中提供三种索引:字段访问、基本切片、高级索引。
numpy 中的基本切片将 Python 的切片基本概念扩展到 N 维。
当 obj 是切片对象(由 start:stop:step 表示法构造)、整数或切片对象和整数的元组时,会发生这种情况。还可以使用省略号和 newaxis 对象。
示例:使用切片对象
在下面的示例中,使用基本切片语法 start:stop:step对给定数组 Arr 进行切片。请注意,在 Python 中,所有索引都是从零开始。
import numpy as np
Arr = np.arange(10)
print("Arr 包含:", Arr)
#Arr从索引=1开始,在索引=7处停止,步长=2
SArr = Arr[1:7:2]
print("SArr 包含:", SArr)
上述代码的输出将是:
Arr 包含: [0 1 2 3 4 5 6 7 8 9]
SArr 包含: [1 3 5]
示例:不指定start、stop、step的切片对象
可以在不指定start、end或step的情况下构造切片对象。在这种情况下,数组的起始索引被视为start,最后一个索引被视为stop,1 被视为step。考虑下面的示例。
import numpy as np
Arr = np.arange(10)
print("Arr 包含:", Arr)
#从start开始到index=7的Arr
SArr1 = Arr[:7]
print("SArr1 包含:", SArr1)
#从索引=2开始到最后一个的 Arr
SArr2 = Arr[2:]
print("SArr2 包含:", SArr2)
#从索引=2开始到最后一个的Arr
#步骤=2
SArr3 = Arr[2::2]
print("SArr3 包含:", SArr3)
上述代码的输出将是:
Arr 包含: [0 1 2 3 4 5 6 7 8 9]
SArr1 包含: [0 1 2 3 4 5 6]
SArr2 包含: [2 3 4 5 6 7 8 9]
SArr3 包含: [2 4 6 8]
示例:使用负索引切片对象
Python 支持负索引,向后从 -1 开始。因此,start和stop的负值可以分别解释为n+start和n+stop,其中n 是相应维度中的元素数量。考虑下面的示例。
import numpy as np
Arr = np.arange(10)
print("Arr 包含:", Arr)
#从索引=-5开始到索引=-1的Arr
SArr = Arr[-5:-1]
print("SArr 包含:", SArr)
上述代码的输出将是:
Arr 包含: [0 1 2 3 4 5 6 7 8 9]
SArr 包含: [5 6 7 8]
示例:使用切片函数对数组进行切片
切片对象也可以使用Python内置的切片函数来构造。考虑下面的示例。
import numpy as np
Arr = np.arange(10)
print("Arr 包含:", Arr)
#从索引=1开始到index=7 步长=2
s = slice(1,7,2)
SArr = Arr[s]
print("SArr 包含:", SArr)
上述代码的输出将是:
Arr 包含: [0 1 2 3 4 5 6 7 8 9]
SArr 包含: [1 3 5]
示例:选择单个元素
单个元素可以通过指定索引号从数组中选择。
import numpy as np
Arr = np.arange(10)
print("Arr 包含:", Arr)
print("Arr[2]:", Arr[2])
上述代码的输出将是:
Arr 包含: [0 1 2 3 4 5 6 7 8 9]
Arr[2]: 2
示例:二维数组切片
在下面的示例中,对二维数组进行了切片。
import numpy as np
Arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print("Arr 包含:\n", Arr)
#从索引Arr[1:]中切片数组
SArr1 = Arr[1:]
print("\nSArr1 包含:\n", SArr1)
#从索引 Arr[1:,1:] 中切片数组
SArr2 = Arr[1:,1:]
print("\nSArr2 包含:\n", SArr2)
上述代码的输出将是:
Arr 包含:
[[1 2 3]
[4 5 6]
[7 8 9]]
SArr1 包含:
[[4 5 6]
[7 8 9]]
SArr2 包含:
[[5 6]
[8 9]]
示例:使用省略号对二维数组进行切片
切片也可以使用省略号...来完成。省略号扩展为选择元组索引所有维度所需的 : 对象的数量。在大多数情况下,这意味着扩展选择元组的长度是x.ndim。考虑以下示例。
import numpy as np
Arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print("Arr 包含:\n", Arr)
#切片使用:
SArr1 = Arr[:,1]
print("\nSArr1 包含:\n", SArr1)
#使用省略号
SArr2 = Arr[...,1]
print("\nSArr2 包含:\n", SArr2)
上述代码的输出将是:
Arr 包含:
[[1 2 3]
[4 5 6]
[7 8 9]]
SArr1 包含:
[2 5 8]
SArr2 包含:
[2 5 8]
示例:使用 numpy.newaxis 切片二维数组
numpy.newaxis 也可以在切片数组时使用,该数组将结果选择的维度扩展一个单位长度维度。 numpy.newaxis 是 None 的方便别名。考虑以下示例。
import numpy as np
Arr = np.array([[1,2,3],[4,5,6],[7,8,9]])
print("Arr 包含:\n", Arr)
#切片使用:
SArr1 = Arr[:,1]
print("\nSArr1 包含:\n", SArr1)
#使用np.newaxis
SArr2 = Arr[np.newaxis,:,1]
print("\nSArr2 包含:\n", SArr2)
#使用np.newaxis
SArr3 = Arr[:,np.newaxis,1]
print("\nSArr3 包含:\n", SArr3)
#使用np.newaxis
SArr4 = Arr[:,1,np.newaxis]
print("\nSArr4 包含:\n", SArr4)
上述代码的输出将是:
Arr 包含:
[[1 2 3]
[4 5 6]
[7 8 9]]
SArr1 包含:
[2 5 8]
SArr2 包含:
[[2 5 8]]
SArr3 包含:
[[2]
[5]
[8]]
SArr4 包含:
[[2]
[5]
[8]]