NumPy - 高级索引

首页 / Numpy / NumPy - 高级索引

有两种类型的高级索引- Integer索引 和 Boolean索引 。

整数索引

根据数组的N维索引选择数组中的任意项,每个整数数组代表该维度的索引数,当索引与目标ndarray的维数一样时,它变得很简单。

示例1

import numpy as np 

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

其输出如下-

[1  4  5]

选择包括第一个数组中位于(0,0),(1,1)和(2,0)的元素。

在以下示例中,选择了放置在4X3阵列角上的元素。选择的行索引为[0,0]和[3,3],而列索引为[0,2]和[0,2]。

示例2

import numpy as np 
x = np.array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]]) 
   
print 'Our array is:' 
print x 
print '\n' 

rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]]) 
y = x[rows,cols] 
   
print 'The corner elements of this array are:' 
print y

该程序的输出如下-

Our array is:                                                                 
[[ 0  1  2]                                                                   
 [ 3  4  5]                                                                   
 [ 6  7  8]                                                                   
 [ 9 10 11]]
 
The corner elements of this array are:                                        
[[ 0  2]                                                                      
 [ 9 11]] 

输出选择是一个包含边角元素的ndarray对象 。

可以通过将一个切片(:)或省略号(…)与一个索引数组结合使用高级索引索引和基本索引。以下示例对行使用切片,对列使用高级索引。两者同时使用slice时,输出相同。但是高级索引会导致复制,并且可能具有不同的内存布局。

示例3

import numpy as np 
x = np.array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]]) 

print 'Our array is:' 
print x 
print '\n'  

# slicing 
z = x[1:4,1:3] 

print 'After slicing, our array becomes:' 
print z 
print '\n'  

# 使用列的高级索引
y = x[1:4,[1,2]] 

print 'Slicing using advanced index for column:' 
print y

该程序的输出如下:

Our array is:
[[ 0  1  2] 
 [ 3  4  5] 
 [ 6  7  8]
 [ 9 10 11]]
 
After slicing, our array becomes:
[[ 4  5]
 [ 7  8]
 [10 11]]

Slicing using advanced index for column:
[[ 4  5]
 [ 7  8]
 [10 11]] 

布尔数组索引

当输出对象是布尔运算(如比较运算符)的输出时,将使用这种类型的高级索引。

无涯教程网

示例1

在此示例中,作为布尔索引的输出,返回大于5的项目。

import numpy as np 
x = np.array([[ 0,  1,  2],[ 3,  4,  5],[ 6,  7,  8],[ 9, 10, 11]]) 

print 'Our array is:' 
print x 
print '\n'  

# 现在我们将打印大于 5 的元素
print 'The items greater than 5 are:' 
print x[x > 5]

该程序的输出将是-

Our array is: 
[[ 0  1  2] 
 [ 3  4  5] 
 [ 6  7  8] 
 [ 9 10 11]] 
 
The items greater than 5 are:
[ 6  7  8  9 10 11] 

示例2

在此示例中,使用〜(补码运算符)来省略NaN(非数字)元素。

链接:https://www.learnfk.comhttps://www.learnfk.com/numpy/numpy-advanced-indexing.html

来源:LearnFk无涯教程网

import numpy as np 
a = np.array([np.nan, 1,2,np.nan,3,4,5]) 
print a[~np.isnan(a)]

它的输出将是-

[ 1.   2.   3.   4.   5.] 

示例3

下面的示例说明如何从数组中滤除非复杂元素。

import numpy as np 
a = np.array([1, 2+6j, 5, 3.5+5j]) 
print a[np.iscomplex(a)]

在这里,输出如下-

[2.0+6.j  3.5+5.j] 

这一章《NumPy - 高级索引》你学到了什么?在下面做个笔记吧!做站不易,你的分享是对我们最大的支持,感谢!😊

好记忆不如烂笔头。留下你的足迹吧 :)

相关文章

Linux实战技能100讲 -〔尹会生 - 〕

MongoDB高手课 -〔唐建法(TJ) - 〕

如何看懂一幅画 -〔罗桂霞 - 〕

人人都用得上的写作课 -〔涵柏 - 〕

多个矩阵的加权和

如何拆分列表数据并填充到 DataFrame?

将矩阵拆分为更小的块并根据其值做一些事情

Pandas 函数基于单列创建多列

将 timedelta 添加到周以上的日期列

如何使用 groupby 判断是否有多个版本

视频推荐〔Numpy - 3.8 pandas plot画图〕

更多 Numpy-advanced-indexing 视频教程 »