Numpy高级索引和赋值操作

Numpy高级索引和赋值操作

在本文中,我们将介绍Numpy中的高级索引和赋值操作。Numpy作为Python科学计算领域的核心库,为我们提供了丰富的操作手段和科学计算工具,其中高级索引和赋值操作在数据处理过程中尤为重要。本文将对这些操作进行详细的介绍和实例演示。

阅读更多:Numpy 教程

Fancy indexing

Numpy中的fancy indexing是通过数组作为索引值来获取特定行或列的值,这种方法既快又便利。我们可以通过bool型数组、整数型数组、可迭代对象等多种方式进行索引。

布尔型索引

通过布尔型数组可以实现对数组中特定值的筛选和提取。例如,我们有一个由3×3的随机数构成的二维数组:

import numpy as np

arr = np.random.rand(3, 3)
print(arr)
Python

输出的结果可能类似以下:

[[0.58721354 0.75001261 0.5488577 ]
 [0.00709628 0.12892862 0.35817707]
 [0.15871203 0.05167109 0.93229714]]
Python

我们通过布尔型数组提取出大于0.5的元素:

mask = arr > 0.5 
print(mask)
Python

输出结果为:

[[ True  True  True]
 [False False False]
 [False False  True]]
Python

这个结果由布尔类型数组表示,代表了数组中大于0.5的部分为True,其余为False。我们可以将mask用作数组的索引来获取符合条件的所有元素:

print(arr[mask])
Python

这个语句将输出所有大于0.5的元素:

[0.58721354 0.75001261 0.5488577  0.93229714]
Python

这种方法在数据处理中十分常用,同时我们可以使用逻辑运算符进行多条件筛选。例如,我们可以使用&(and)和|(or)符号来实现多条件筛选:

mask = (arr > 0.5) & (arr < 0.8)
print(arr[mask])
Python

这个语句将筛选处0.5到0.8之间的元素。

整数型索引

通过整数型数组作为索引值,我们可以获取特定位置的元素。例如,我们仍然有一个3×3的随机数二维数组:

arr = np.random.rand(3, 3)
print(arr)
Python

这个语句输出类似下面的结果:

[[0.22322362 0.14114072 0.45933781]
 [0.22162894 0.95557932 0.26734735]
 [0.2475587  0.71634596 0.58410674]]
Python

通过整数型数组,我们可以获取特定的元素。例如,我们想要获取第一行和第二行的第一个元素和第三个元素,以及第三行的第二个元素和第三个元素:

rows = np.array([0,1,2])
cols = np.array([0,2,1])

print(arr[rows, cols])
Python

这个语句将输出:

[0.22322362 0.26734735 0.71634596]
Python

整数型数组可以进一步进行广播(broadcasting)操作,以获取更多的元素。例如,我们可以假设想要获取第一行和第二行的所有元素:

rows = np.array([0,1]).reshape(2,1)
cols = np.array([0,1,2])

print(arr[rows, cols])
Python

输出的结果为:

[[0.22322362 0.14114072 0.45933781]
 [0.22162894 0.95557932 0.26734735]]
Python

这个二维数组包含了第一行和第二行的所有元素。

可迭代对象索引

除了布尔型和整数型数组,我们还可以用可迭代对象作为索引进行高级索引操作。例如,我们有一个含有8个元素的一维数组:

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr)
Python

这个语句将输出:

[1 2 3 4 5 6 7 8]
Python

我们可以通过一个列表来获取特定位置的元素:

idx = [0, 3, 5]
print(arr[idx])
Python

这个语句将输出:

[1 4 6]
Python

同样,我们可以利用逻辑运算符进行多条件筛选:

mask = (arr % 2 == 0) | (arr < 3)
print(arr[mask])
Python

这个语句将筛选处满足条件的元素:

[1 2 4 6 8]
Python

赋值操作

除了通过索引来获取特定的元素,我们还可以使用高级的赋值操作方法来改变数组的值。

布尔型赋值

我们可以通过一个布尔型数组来将特定的元素赋值为指定的值。例如,我们有一个3×3的随机数二维数组:

arr = np.random.rand(3, 3)
print(arr)
Python

这个语句输出类似下面的结果:

[[0.03016463 0.97018156 0.05214242]
 [0.43496688 0.61222222 0.31894864]
 [0.22289643 0.42182734 0.51816187]]
Python

我们可以通过布尔型数组将其中小于0.5的元素都赋值为0:

arr[arr < 0.5] = 0
print(arr)
Python

这个语句输出的结果是:

[[0.         0.97018156 0.        ]
 [0.         0.61222222 0.        ]
 [0.         0.         0.51816187]]
Python

通过这种方法,我们可以快捷地将数组中不符合条件的元素赋值为指定值。

整数型赋值

我们可以通过整数型数组来完成对特定位置元素的赋值操作。同样,我们仍然有一个3×3的随机数二维数组:

arr = np.random.rand(3, 3)
print(arr)
Python

这个语句输出类似下面的结果:

[[0.1014109  0.56829661 0.20415381]
 [0.13067366 0.37805183 0.80957259]
 [0.50630598 0.0760575  0.71409619]]
Python

我们可以创建一个和数组等大小的整数型数组,并在其中给定需要赋值的位置(例如,我们要将第二行除了第一个位置的元素都赋值为0):

idx = [1, 2]
arr[1, idx] = 0
print(arr)
Python

这个语句输出的结果是:

[[0.1014109  0.56829661 0.20415381]
 [0.13067366 0.         0.        ]
 [0.50630598 0.0760575  0.71409619]]
Python

可迭代对象赋值

通过可迭代对象,我们同样可以快速地对数组中的多个元素进行赋值。例如,我们有一个含有8个元素的一维数组:

arr = np.array([1, 2, 3, 4, 5, 6, 7, 8])
print(arr)
Python

这个语句将输出:

[1 2 3 4 5 6 7 8]
Python

我们可以通过一个列表来将其第一、第三个和第七个元素赋值为0:

idx = [0, 2, 6]
arr[idx] = 0
print(arr)
Python

这个语句输出的结果是:

[0 2 0 4 5 6 0 8]
Python

通过这种方法,我们可以将需要赋值的元素指定为列表,使得赋值操作更为便捷。

总结

高级索引和赋值操作在Numpy中是非常重要的操作手段,能够帮助我们更快捷地获取或修改数组中的元素。布尔型、整数型数组和可迭代对象都可以作为索引来进行高级索引操作,并且逻辑运算符的使用可以帮助我们实现多条件筛选。通过布尔型、整数型和可迭代对象等方式对数组进行赋值同样非常方便。对于需要精确地统计和处理数组数据的场合,这种方法能够快速地提高我们的工作效率。

Python教程

Java教程

Web教程

数据库教程

图形图像教程

大数据教程

开发工具教程

计算机教程

登录

注册