数值索引
数值索引类似列表索引操作使用[],参数为下标,[0,len-1),高维数组的索引使用多个[]连用分别代表一维索引,二维索引...
import numpy as np
import torch
np.random.seed(1)
data1 = np.arange(5)
data2 = np.arange(15).reshape(3,5)
print(data1,end='\n\n')
print(data2,end='\n\n')
print(data1[1])
print(data2[1][2])
# [0 1 2 3 4]
#
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
#
# 1
# 7
列表索引
列表索引在list中不支持,但ndarray可用
列表索引可以将多个索引合在一个列表中作为索引参数
格式为[dim1_index,dim2_index...]
同样也可以将列表换为ndarray或切片形式
import numpy as np
import torch
np.random.seed(1)
data1 = np.arange(5)
data2 = np.arange(15).reshape(3,5)
print(data1,end='\n\n')
print(data2,end='\n\n')
print(data1[[0,1,3]])
print(data2[[0,1],[1,3]])
print(data2[:,[1,2]])
# [0 1 2 3 4]
#
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
#
# [0 1 3]
# [1 8]
# [[ 1 2]
# [ 6 7]
# [11 12]]
注意如果列表索引中若使用二维数组作为索引列表,则会分别取出该维度对应索引中的所有元素
import numpy as np
import torch
np.random.seed(1)
data1 = np.arange(5)
data2 = np.arange(15).reshape(3,5)
print(data2[[[0],[1]],[2,3]])
print(data2[[0,1],[2,3]])
# [[2 3]
# [7 8]]
# [2 8]
这里可以看到[[0],[1]]是把该维度所有元素取出再进行下一维度的索引,而若只使用[0,1]则会与下一维度的索引列表进行两两匹配
布尔索引
布尔索引就是把索引列表换为布尔列表,该列表要与被索引的列表等长,值为True则对应位置保留。
import numpy as np
import torch
np.random.seed(1)
data1 = np.arange(5)
data2 = np.arange(15).reshape(3,5)
print(data1[[True,True,False,True,False]])
# [0 1 3]
同样我们可以设置条件筛选来返回布尔列表,然后重新进行索引
import numpy as np
import torch
np.random.seed(1)
data1 = np.arange(5)
data2 = np.arange(15).reshape(3,5)
print(data2,end='\n\n')
print(data2>5)
print(data2[data2 > 5])
# [[ 0 1 2 3 4]
# [ 5 6 7 8 9]
# [10 11 12 13 14]]
#
# [[False False False False False]
# [False True True True True]
# [ True True True True True]]
# [ 6 7 8 9 10 11 12 13 14]