numpy数组与列表有诸多相似的地方,但也有明显区别,这篇文章介绍数组和列表常用索引的方法
首先是列表,列表的常用索引方法有以下几种,将一一介绍
- 下标索引
- 切片索引
- 函数索引
import numpy as np
# 创建一个3行4列的二维列表
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12]
]
#下标索引
a=matrix[0]
b=matrix[1]
c=matrix[0][1]
print(a,b,c)
#切片索引
a=matrix[:2]
b=matrix[2:3]
c=matrix[1:3][0][2:4]
print(a,b,c)
#搜索索引
a=matrix.index([1,2,3,4])
b=matrix.index([5,6,7,8])
print(a,b)
print(matrix[a],matrix[b])
结果如下:
[1, 2, 3, 4] [5, 6, 7, 8] 2
[[1, 2, 3, 4], [5, 6, 7, 8]] [[9, 10, 11, 12]] [7, 8]
0 1
[1, 2, 3, 4] [5, 6, 7, 8]
[Finished in 274ms]
numpy数组索引方式和列表相似,也包括下标、切片和函数索引,下文主要介绍它们的不同,不同点如下:
- numpy多维数组可以直接使用切片一次性选取指定行到指定列的元素,而列表不行
import numpy as np
matrix = [
[1, 2, 3, 4],
[5, 6, 7, 8],
[9, 10, 11, 12],
[13, 14, 15, 16]
]
start_row = 1 # 起始行的索引
end_row = 3 # 结束行的索引(不包含在内)
start_col = 1 # 起始列的索引
end_col = 3 # 结束列的索引(不包含在内)
# print(matrix[start_row:end_row,start_col:end_col]) 运行会报错
selected_data = [row[start_col:end_col] for row in matrix[start_row:end_row]]
print(selected_data)#只能使用列表推导式或其他方式
print(np.asarray(matrix)[start_row:end_row,start_col:end_col])#转化成数组就可以直接切片
#运行结果
[[ 6 7]
[10 11]]
[[6, 7], [10, 11]]
[Finished in 288ms]
Numpy多维数组可以直接进行切片操作,而不需要像Python列表那样使用列表推导式或其他方式。这是因为Numpy库对切片操作进行了特殊处理,提供了更灵活和直观的切片语法。
- 搜索函数不同,numpy提供了多种搜索函数,包括where(搜索指定元素),argmax(搜索最大值),argmin(搜索最小值)等
import numpy as np
arr = np.array([1, 2, 3, 4, 5])
indices = np.where(arr == 3)
print(indices) # 输出: (array([2]),)
print(indices[0]) # 输出: [2]
arr = np.array([5, 2, 8, 1, 7])
max_index = np.argmax(arr)
min_index = np.argmin(arr)
print(max_index) # 输出: 2
print(min_index) # 输出: 3
- numpy还提供了布尔索引的方式,可用于条件筛选
import numpy as np
# 创建一个NumPy数组
arr = np.array([1, 2, 3, 4, 5])
# 创建一个布尔数组,用于指定条件
condition = (arr > 2)
# 使用布尔数组进行索引
filtered_arr = arr[condition]
print(condition) #输出[False False True True True]
print(filtered_arr) # 输出: [3, 4, 5]
综上就是数组和列表常用的几种索引方式,作者水平有限,如有不足,可在评论区补充,感谢!