NumPy 教程:高级索引(整数和布尔值)
如果 ndarray
是非元组序列,则数据类型为整数或布尔值 ♽♽ 至少一个,或者♽ 元素是序列 A tuple 对象,我们可以用它来索引 ndarray
。高级索引始终返回数据的副本。相反,切片仅提供单个视图。
numpy 中有两种高级索引类型:整数和布尔值。
整数索引
此机制有助于基于 N 维索引检索数组中的任何元素。每行整数代表该维度的下标值。当索引中的元素数量达到目标ndarray
的大小时,就变得相当容易了。
以下示例从对象 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]
结果包括 下面的示例获取 4X3 数组每个角的元素。行索引为 输出如下: 返回结果是包含每个角元素的 连续索引和基本索引可以使用切片 输出如下: 当结果对象是布尔运算(例如比较运算符)的结果时,使用这种类型的高级索引。 在此示例中,布尔索引结果将返回超过 5 个元素。 的输出如下: 本示例使用 输出如下: 以下示例演示如何从数组中过滤非复数元素。 输出如下:(0,0)
、(1,1)(1,1) ( 1,1) (2, 0) 在数组中)元素就位。
[0,0]
和 [3,3]
,而列索引为 [0,2]♽[0,2]♽ ❀, 2]
。 示例2
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print '我们的数组是:'
print x
print '\n'
rows = np.array([[0,0],[3,3]])
cols = np.array([[0,2],[0,2]])
y = x[rows,cols]
print '这个数组的每个角处的元素是:'
print y
我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
这个数组的每个角处的元素是:
[[ 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 '我们的数组是:'
print x
print '\n'
# 切片
z = x[1:4,1:3]
print '切片之后,我们的数组变为:'
print z
print '\n'
# 对列使用高级索引
y = x[1:4,[1,2]]
print '对列使用高级索引来切片:'
print y
我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
切片之后,我们的数组变为:
[[ 4 5]
[ 7 8]
[10 11]]
对列使用高级索引来切片:
[[ 4 5]
[ 7 8]
[10 11]]
布尔索引
示例 1
import numpy as np
x = np.array([[ 0, 1, 2],[ 3, 4, 5],[ 6, 7, 8],[ 9, 10, 11]])
print '我们的数组是:'
print x
print '\n'
# 现在我们会打印出大于 5 的元素
print '大于 5 的元素是:'
print x[x > 5]
我们的数组是:
[[ 0 1 2]
[ 3 4 5]
[ 6 7 8]
[ 9 10 11]]
大于 5 的元素是:
[ 6 7 8 9 10 11]
示例2
~
(补码运算符)来过滤♽♽。 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]
版权声明
本文仅代表作者观点,不代表Code前端网立场。
本文系作者Code前端网发表,如需转载,请注明页面地址。
发表评论:
◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。