数值范围中的数组(Array From Numerical Ranges)
优质
小牛编辑
137浏览
2023-12-01
可以从ndarray中选择非元组序列,整数或布尔数据类型的ndarray对象,或者至少有一个项目是序列对象的元组。 高级索引始终返回数据的副本。 与此相反,切片仅呈现视图。
高级索引有两种类型 - Integer和Boolean 。
整数索引
此机制有助于根据其N维索引选择数组中的任意项。 每个整数数组表示该维度的索引数。 当索引由与目标ndarray的维度一样多的整数数组组成时,它变得简单明了。
在以下示例中,选择了ndarray对象的每一行中指定列的一个元素。 因此,行索引包含所有行号,列索引指定要选择的元素。
例子1 (Example 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 (Example 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 for row和advanced index for column。 当切片用于两者时,结果是相同的。 但高级索引会导致复制,并且可能具有不同的内存布局。
例子3 (Example 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'
# using advanced index for column
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 (Example 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'
# Now we will print the items greater than 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 (Example 2)
在此示例中,使用〜(补码运算符)省略了NaN(非数字)元素。
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 (Example 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]