Numpy数组和python列表索引方法

numpy数组与列表有诸多相似的地方,但也有明显区别,这篇文章介绍数组和列表常用索引的方法

首先是列表,列表的常用索引方法有以下几种,将一一介绍

  1. 下标索引
  2. 切片索引
  3. 函数索引
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]

综上就是数组和列表常用的几种索引方式,作者水平有限,如有不足,可在评论区补充,感谢!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值