NumPy库--数组的索引和切片

本文介绍了NumPy库中数组的索引和切片技巧,包括常用索引、布尔索引及值的替换。通过实例展示了如何获取特定行、列数据,使用布尔条件筛选元素,以及如何替换满足条件的值。内容涵盖了单行多列的索引方式、布尔索引的运用以及where函数的应用。
摘要由CSDN通过智能技术生成

NumPy库–数组的索引和切片

1. 常用索引

获取某行的数据

# 1. 如果是一维数组
a1 = np.arange(0,29)
print(a1)
print(a1[1]) # 获取下标为1的元素,结果为1

a1 = np.arange(0,24).reshape((4,6))
print(a1)
print(a1[1]) # 获取下标为1的行的数据,结果为[ 6  7  8  9 10 11]

连续获取某几行的数据

# 1. 获取连续的几行的数据
a1 = np.arange(0,24).reshape((4,6))
# a2 = np.random.randint(0,10,size=(4,6))
print(a1[0:2]) # 获取0行到1列的数据
# result:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]]

# 2. 获取不连续的几行的数据
print(a1[[0,2,3]])
# result:
[[ 0  1  2  3  4  5]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

# 3. 也可以使用负数进行索引
print(a1[[-1,-2]])
# result:
[[18 19 20 21 22 23]
 [12 13 14 15 16 17]]

获取某行某列的数据

a1 = np.arange(0,24).reshape((4,6))
print(a1[1,1]) # 获取1行1列的数据

print(a1[0:2,0:2]) # 获取0-1行的0-1列的数据
print(a1[[1,2],[2,3]]) # 获取(1,2)和(2,3)的两个数据,又名花式索引

获取某列的数据

a1 = np.arange(0,24).reshape((4,6))
print(a1[:,1]) # 获取第1列的数据
print(a1[:,[1,3]]) # 获取第1列和第3列的数据

Summary

  1. 如果数组是一维的,那么索引和切片是跟python的列表是一样的。
  2. 如果是多维的,那么在中括号中,给两个值,两个值是通过逗号分隔的,逗号前面是行,逗号后面的是列。如果中括号中只有一个值,那么就是代表的是行。
  3. 如果是多维数组,那么行的部分和列的部分,都是遵循一维数组的方式,可以使用整形,切片,还可以使用中括号的形式来代表不连续的。比如a[[1,2],[3,4]]

2. 布尔索引

布尔运算也是矢量的:

a1 = np.arange(0,24).reshape((4,6))
print(a1<10) # 返回一个新的数组,这个数组中的值全部都是bool类型
>[[ True  True  True  True  True  True]
 [ True  True  True  True False False]
 [False False False False False False]
 [False False False False False False]]

假如要将a1数组中所有小于10的数据全部提取出来:

a1 = np.arange(0,24).reshape((4,6))
a2 = a1 < 10
print(a1[a2]) # 取出全部小于10的元素

其中布尔运算可以有!===><>=<=以及&(与)|(或)

a1 = np.arange(0,24).reshape((4,6))
a2 = a1[(a1 < 5) | (a1 > 10)]
print(a2)

Summary

布尔索引是通过相同数组上的True还是False来进行提取的。提取的条件可以有多个,那么如果有多个,可以使用&来代表或,用|来代表或,如果有多个条件,那么每个条件要使用圆括号括起来。

3. 值的替换

利用索引,也可以做一些值得替换。把满足条件的位置的值替换成其他的值:

a1 = np.arange(0,24).reshape((4,6))
a1[3] = 0 # 将第三行的所有值都替换成0
print(a1)

# result:
[[ 0  1  2  3  4  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [ 0  0  0  0  0  0]]

若需要指定特定的一组值:

a3 = np.random.randint(0,10,size=(3,5))
print(a3)
a3[1]=np.array([1,2,3,4,5])
print(a3)

# result:
# 替换之前:
[[2 4 1 8 4]
 [1 5 5 8 9]
 [5 0 1 8 0]]
# 替换之后:
[[2 4 1 8 4]
 [1 2 3 4 5]
 [5 0 1 8 0]]

也可以使用条件索引来实现:

a1 = np.arange(0,24).reshape((4,6))
a1[a1 < 5] = 0 # 将小于5的所有值全部替换成0
print(a1)

# result:
[[ 0  0  0  0  0  5]
 [ 6  7  8  9 10 11]
 [12 13 14 15 16 17]
 [18 19 20 21 22 23]]

还可以使用函数来实现:

# where函数:
a1 = np.arange(0,24).reshape((4,6))
a2 = np.where(a1 < 10,1,0) # 把a1中所有小于10的数全部变成1,其余的变成0
print(a2)

# result:
[[1 1 1 1 1 1]
 [1 1 1 1 0 0]
 [0 0 0 0 0 0]
 [0 0 0 0 0 0]]

# 用法拓展:
a3 = np.random.randint(0,10,size=(3,5))
print(a3)
result = np.where(a3<5)
result

# result:

a3:
[[6 1 8 5 0]
 [1 4 1 2 1]
 [5 0 5 4 2]]

result:
(array([0, 0, 1, 1, 1, 1, 1, 2, 2, 2], dtype=int64),
 array([1, 4, 0, 1, 2, 3, 4, 1, 3, 4], dtype=int64))

Summary

  1. 可以使用索引或者切片来替换
  2. 使用条件索引来替换
  3. 使用where函数来实现,仅含一个参数的形式是返回满足条件的索引位置,含三个参数是返回替换后的数组。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DeeGLMath

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值