Numpy 使用中一维数组索引另一维数组

Numpy 使用中一维数组索引另一维数组

在Numpy中,我们可以通过一个一维数组来索引另一个一维数组。这个过程叫作数组索引。

阅读更多:Numpy 教程

数组索引的基本用法

最基本的用法是通过一个一维整数数组,来获取目标数组中对应位置的值。例如我们有下面两个数组:

import numpy as np

arr = np.arange(10, 20)
indexes = np.array([1, 3, 5, 7])

通过使用 indexes 数组来索引 arr 数组,我们可以获取到对应的元素:

>>> arr[indexes]
array([11, 13, 15, 17])

这个过程的本质是,我们使用 indexes 数组中的值,来对 arr 数组中的每一个元素进行取值操作。

数组索引的进阶用法

除了最基本的用法,Numpy还提供了更为灵活的用法,甚至可以通过一维数组来获取二维数组中的元素。

索引多个维度的数组

例如我们有下面两个二维数组:

arr_2d = np.array([
    [ 0,  1,  2,  3],
    [ 4,  5,  6,  7],
    [ 8,  9, 10, 11]
])
row_indexes = np.array([0, 1, 2])
col_indexes = np.array([2, 1, 3])

我们可以使用 row_indexes 数组来索引 arr_2d 数组中的行,使用 col_indexes 数组来索引每一行中对应的列,从而实现对目标数组的多维索引。

>>> arr_2d[row_indexes, col_indexes]
array([ 2,  5, 11])

索引布尔数组

除了使用整数数组外,我们还可以使用布尔数组来对目标数组进行索引。

例如我们有下面一个一维数组:

arr = np.array([1, 2, 3, 4, 5])
bool_indexes = np.array([True, False, True, False, True])

我们使用这个布尔数组来索引 arr 数组,就可以获取到所有布尔数组为True的元素。

>>> arr[bool_indexes]
array([1, 3, 5])

使用数组索引修改目标数组

除了获取目标数组的元素外,我们还可以使用一维数组来对目标数组的元素进行赋值,从而修改目标数组中的数值。

例如我们有下面这个一维数组:

arr = np.array([1, 2, 3, 4, 5])
indexes = np.array([1, 3])
new_values = np.array([10, 20])

我们可以使用 indexes 数组来对目标数组 arr 的第1和第3个元素进行修改,修改为10和20:

arr[indexes] = new_values
print(arr)
# 输出:[ 1 10  3 20  5]

总结

使用一个一维数组来索引另一个一维数组,是Numpy中的一个基础操作。我们可以使用整数数组、布尔数组等来对目标数组进行索引操作,甚至可以实现多维数组的索引和修改操作。这个功能在处理大规模数据时,可以大大减少代码量,提高代码效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程