Numpy 快速的Fancy Indexing

Numpy 快速的Fancy Indexing

在本文中,我们将介绍Numpy中的Fancy Indexing,这是一种快速的操作,允许您通过一组索引从数组中选择特定的值,以及执行其他高级的数据操作。

Fancy Indexing指的是使用序列或布尔值数组作为索引来访问数组中的元素。在Numpy中,我们可以使用整数、布尔值或由这些类型混合组成的集合作为索引,以便快速地选择特定的元素。

阅读更多:Numpy 教程

Fancy Indexing的基础

在使用Fancy Indexing时,我们可以使用整数、布尔值或整数和布尔值的混合数组来选择数据。如下是一些基本的例子。

整数数组索引

整数数组索引允许我们按照指定的索引来选择数组中的元素。例如,如果我们有一个形状为(3,3)的数组,我们可以使用以下代码来选择特定的元素:

import numpy as np

#创建一个形状为(3,3)的数组 
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

#选择特定的元素
indices = np.array([0, 2])
print(a[indices]) #[[0 1 2] [6 7 8]] 

在这个例子中,我们创建了一个形状为(3,3)的数组,并使用整数数组[0, 2]来选择第一行和第三行的元素。

布尔数组索引

布尔数组索引用于根据布尔值数组来选择数据。在布尔数组中,True代表选中,False代表忽略。例如,如果我们有一个形状为(3,3)的数组,我们可以使用以下代码来选择元素值大于5的元素:

import numpy as np

#创建一个形状为(3,3)的数组 
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

#返回一个布尔数组
bool_indices = a > 5
print(bool_indices) #[[False False False] [False False False] [ True True True]]

#使用布尔数组来选择元素
print(a[bool_indices]) #[6 7 8]

在这个例子中,我们创建了一个形状为(3,3)的数组,并使用布尔数组a > 5来选择元素值大于5的元素。

混合整数和布尔数组索引

我们还可以使用由整数和布尔值混合组成的数组来选择数据。这使我们能够选择与布尔值对应的索引以及与整数索引对应的值。例如,如果我们有一个形状为(3,3)的数组,我们可以使用以下代码来选择第1行、第2行和第3列的元素:

import numpy as np

#创建一个形状为(3,3)的数组 
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

#选择第1行、第2行和第3列的元素
indices = np.array([True, True, False])
print(a[indices, [0, 1, 2]]) #[[0 1 5]]

在这个例子中,我们创建了一个形状为(3,3)的数组,并使用混合整数和布尔值的数组来选择第1行、第2行和第3列的元素。

快速的Fancy Indexing操作

除了上述基本用法外,我们还可以使用Fancy Indexing完成其他高级的数据操作,包括:

选取特定行或列的子数组

使用Fancy Indexing我们可以轻松地选择特定的行或列,并创建一个新的子数组。例如,如果我们有一个形状为(3,4)的数组,我们可以使用以下代码来选择第0行、第2行和第3列,创建一个新的子数组:

import numpy as np

#创建一个形状为(3,4)的数组 
a = np.array([[0, 1, 2, 3], [4, 5, 6, 7], [8, 9, 10, 11]])

#选取特定的行和列创建一个新的子数组
print(a[[0, 2], :][:, [2, 3]]) # [[2 3] [10 11]]

在这个例子中,我们选择了第0行和第2行,然后再选择第3列和第4列,最后创建了一个新的(2,2)的子数组。

修改特定行或列的值

Fancy Indexing也可以用来修改特定行或列的值。例如,如果我们有一个形状为(3,3)的数组,我们可以使用以下代码将第1行的值都设置为0:

import numpy as np

#创建一个形状为(3,3)的数组 
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

#设置第1行的值都为0
a[1,:] = 0
print(a) #[[0 1 2] [0 0 0] [6 7 8]]

在这个例子中,我们使用Fancy Indexing来选择第1行,并将它的所有值都设置为0。

赋值操作

使用Fancy Indexing,可以将一个数组的值赋给另外一个数组。例如,如果我们有一个形状为(3,3)的数组和一个形状为(2,2)的数组,我们可以使用以下代码将第1行和第2列的值赋给新的子数组:

import numpy as np

#创建一个形状为(3,3)的数组 
a = np.array([[0, 1, 2], [3, 4, 5], [6, 7, 8]])

#创建一个形状为(2,2)的数组
b = np.array([[1, 1], [1, 1]])

#将第1行和第2列的值赋给新的子数组
a[1:3, 1:3] = b
print(a) #[[0 1 2] [3 1 1] [6 1 1]]

在这个例子中,我们使用Fancy Indexing来选择第1行和第2列,并将它们的值赋给一个形状为(2,2)的数组。

总结

Fancy Indexing是一个简单而强大的Numpy工具,它允许我们快速选择特定的行、列或元素,并执行其他高级的数据操作。使用基本的整数、布尔值或混合整数和布尔值的数组,您可以轻松地选择数据并创建新的子数组,甚至可以修改特定行或列的值。请您尝试使用Fancy Indexing完成其他高级的数据操作,以发掘Numpy的更多魅力!

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程