Task 02 索引

本文详细介绍了NumPy数组的索引和切片操作,包括整数索引、切片索引、dots索引以及整数数组索引和布尔索引。通过示例展示了如何选取数组元素、创建视图以及应用条件筛选数据。同时,文章还演示了在图形绘制中如何利用条件索引标记特定数据点。
摘要由CSDN通过智能技术生成

索引与切片

numpy中数组索引机制指的是用方括号([])加序号的形式引用单个数组元素,它的用处很多,比如抽取元素,选取数组的几个元素,甚至为其赋一个新值。

整数索引

import numpy as np

x = np.array([1,2,3,4,5,6])
print(x[2])

x = np.array([[21,22,23,24,25],
              [26,27,28,29,30],
              [11,12,13,14,15],
              [16,17,18,19,20]])
print(x[2])
print(x[2][1])
print(x(2,1))
# 3
# [11 12 13 14 15]
# 12

切片索引
切片操作是指抽取数组的一部分元素生成新数组。对 python 列表进行切片操作得到的数组是原数组的副本,而对 Numpy 数据进行切片操作得到的数组则是指向相同缓冲区的视图。
如果想抽取(或查看)数组的一部分,必须使用切片语法,也就是,把几个用冒号( start:stop:step )隔开的数字置于方括号内。
为了更好地理解切片语法,还应该了解不明确指明起始和结束位置的情况。如省去第一个数字,numpy 会认为第一个数字是0;如省去第二个数字,numpy 则会认为第二个数字是数组的最大索引值;如省去最后一个数字,它将会被理解为1,也就是抽取所有元素而不再考虑间隔。

#对于二维数组切片
import numpy as np

x = np.array([[50,51,52,53,54],
              [60,61,62,63,64],
              [70,71,72,73,74],
              [80,81,82,83,84],
              [90,91,92,93,94]])
print(x[0:2])
#  [[50 51 52 53 54]
#   [60 61 62 63 64]]
print(x[2:])
#  [[70 71 72 73 74]
#   [80 81 82 83 84]
#   [90 91 92 93 94]]
print(x[:])
#  [[50 51 52 53 54]
#   [60 61 62 63 64]
#   [70 71 72 73 74]
#   [80 81 82 83 84]
#   [90 91 92 93 94]]
print(x[:,2])
#  [52 62 72 82 92]
print(x[1:3,2:4])
#  [[62 63]
#   [72 73]]
print(x[::1,:])
#  [[50 51 52 53 54]
#   [60 61 62 63 64]
#   [70 71 72 73 74]
#   [80 81 82 83 84]
#   [90 91 92 93 94]]

dots索引
NumPy 允许使用 ... 表示足够多的冒号来构建完整的索引列表。
比如,如果 x 是 5 维数组:

  1. x[1,2,...] 等于 x[1,2,:,:,:]
  2. x[...,3] 等于 x[:,:,:,:,3]
  3. x[4,...,5,:] 等于 x[4,:,:,5,:]
    实例:
import numpy as np

x = np.random.randint(1, 500, [2, 1, 3])
print(x)
#  [[[447 355 418]]
#
#   [[ 64 384  98]]]
print(x[1,...])
#  [[188 154 294]]
print(x[...,2])
#  [[328]
#   [332]]

整数数组索引

import numpy as np

x = np.array([1,2,3,4,5,6,7,8])
r = [0,1,2]
print(x[r])
#  [1 2 3]

布尔索引

import numpy as np

x = np.array([1, 2, 3, 4, 5, 6, 7, 8])
y = x > 5
print(y)
#  [False False False False False True True True]
print(x[x > 5])
#  [6 7 8]
x = np.array([np.nan, 1, 2, np.nan, 3, 4, 5])
y = np.logical_not(np.isnan(x))
print(x[y])
#  [1. 2. 3. 4. 5.]
import numpy as np
import matplotlib.pyplot as plt
x = np.linspace(0, 2 * np.pi, 50)
y = np.sin(x)
print(len(x)) # 50
plt.plot(x, y)
mask = y >= 0
print(len(x[mask])) # 25
print(mask)

在这里插入图片描述
插入此行代码

plt.plot(x[mask], y[mask], 'bo')

在这里插入图片描述
加入条件

mask = np.logical_and(y >= 0, x <= np.pi / 2)
print(mask)

plt.plot(x[mask], y[mask], 'go')
plt.show()

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值