2-02-3 NumPy 切片和索引

NumPy 切片和索引

1-03 Python 基本数据类型 有介绍过 Python 基本的索引与切片,不过主要是针对列表,本节主要针对的是 NumPy 的切片和索引。以下实例是通过冒号分隔切片参数 start:stop:step 来进行切片操作。

实例

import numpy as np
  
a = np.arange(10)  
b = a[2:7:2]   # 从索引 2 开始到索引 7 停止,间隔为 2
print(b)
  
输出结果为:
[2  4  6]

多维数组同样适用上述索引提取方法,下例中 a 为一个 3*2 的二维数组。

实例

import numpy as np
  
a = np.array([[1,2],[3,4],[5,6]])
print(a)
# 从某个索引处开始切割
print('从数组索引 a[1:] 处开始切割')
print(a[1:])
  
输出结果为:
[[1 2]
 [3 4]
 [5 6]]
从数组索引 a[1:] 处开始切割
[[3 4]
 [5 6]]

切片还可以包括省略号 ,来使选择元组的长度与数组的维度相同。 如果在行位置使用省略号,它将返回包含行中元素的 ndarray。

实例

import numpy as np
  
a = np.array([[1,2],[3,4],[5,6]])  
print (a) # a 为一个 3 (行) * 2(列) 的 ndarray
print (a[0,1])   # 第 1 行,第 2 列的元素,应为 2 
print (a[...,1])   # 第 2 列元素 [2,4,6],直切片,选定特定列数
print (a[1,...])   # 第 2 行元素,为 [3,4],横切片,选定特定行数
print (a[1:,...])  # 第 1 行及剩下的所有元素
  
输出结果为:
[[1 2]
 [3 4]
 [5 6]]
2
[2 4 6]
[3 4]
[[3 4]
 [5 6]]

NumPy 提供更便利的索引方式,比方来说我们要针对以下数组取出三个元素分别是 (0,0) , (1,1) 和 (2,0) 位置处的元素,同常我们会分三次来获取数据,就是 a(0,0) , a(1,1) 和 a(2,0),但是 NumPy 可以透过数组索引的方式,分别将维度 1(行)与维度 2 (列)的位置,分别形成一个数组 ( 0, 1, 2) 与 ( 0, 1, 0),在当成索引的方式来获取这三个元素。

实例

import numpy as np 
a = np.array([[1,  2],  [3,  4],  [5,  6]]) 
print(a[0,0],a[1,1],a[2,0]) # 逐个索引
fastindex = a[[0,1,2],  [0,1,0]]   # 数组索引
print (fastindex)
  
输出结果为:
1 4 5
[1  4  5]

可以借助切片 : 或 … 与索引数组组合。如下面例子。

实例

import numpy as np
  
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
b = a[1:3, 1:3]
c = a[1:3,[1,2]]
d = a[...,1:]
print(b)
print(c)
print(d)
  
输出结果为:
[[5 6]
 [8 9]]
[[5 6]
 [8 9]]
[[2 3]
 [5 6]
 [8 9]]

布尔索引通过布尔运算(如:比较运算符)来获取符合指定条件的元素的数组。

实例

import numpy as np 
  
a = np.array([[1,2,3], [4,5,6],[7,8,9]])
# 现在我们会打印出大于 5 的元素  
print  ('大于 5 的元素是:')
print (a >  5)
print (a[a >  5])
  
输出结果为:
[[False False False]
 [False False  True]
 [ True  True  True]]
[6 7 8 9]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值