从 NumPy 中的数组中删除元素

Vaibhav Vaibhav 2023年10月10日
  1. 使用 numpy.delete() 函数删除元素
  2. 使用 numpy.setdiff1d() 函数删除元素
从 NumPy 中的数组中删除元素

在本文中,我们将学习从 NumPy 数组中删除元素的两种方法。

使用 numpy.delete() 函数删除元素

请参考以下代码。

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7]
modifiedArray = np.delete(myArray, indexes)
print(modifiedArray)

输出:

[ 1  2  3  5  7  9 10]

在上面的代码中,我们使用了 NumPy 库的 delete() 函数。delete() 函数接受三个参数,即 arrobjaxis,并输出一个 NumPy 数组。arr 是我们希望从中删除元素的 NumPy 数组。obj 是整数列表。这些数字表示应从数组中删除的元素的索引。最后,axis 是一个可选参数。axis 指的是应删除 obj 所针对的元素所沿的轴。如果为该参数分配了 None 值,则将 arr 展平,并对该展平的数组进行删除。

与往常一样,如果为该方法提供的索引超出 arr 范围,则会抛出 IndexError 异常。

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7, 34]
modifiedArray = np.delete(myArray, indexes)
print(modifiedArray)

输出:

Traceback (most recent call last):
  File "<string>", line 5, in <module>
File "<__array_function__ internals>", line 5, in delete
  File "/path/to/library/numpy/lib/function_base.py", line 4480, in delete
keep[obj,] = False
IndexError: index 34 is out of bounds for axis 0 with size 10

要了解这个函数的更多信息,请参阅此函数的官方文档

以下是在多维 NumPy 数组中删除的其他两个示例。

import numpy as np

myArray = np.array([[1, 2, 3, 4, 5], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25]])
modifiedArray = np.delete(myArray, [1, 2], 1)
print(modifiedArray)

输出:

[[ 1  4  5]
 [11 14 15]
 [21 24 25]]

使用 None 作为参数 axis 的值。

import numpy as np

myArray = np.array([[1, 2, 3, 4, 5], [11, 12, 13, 14, 15], [21, 22, 23, 24, 25]])
modifiedArray = np.delete(myArray, [1, 2], None)
print(modifiedArray)

输出:

[ 1  4  5 11 12 13 14 15 21 22 23 24 25]

使用 numpy.setdiff1d() 函数删除元素

这次,我们将使用 NumPy 中的 setdiff1d() 函数。该函数接受三个参数,ar1ar2assume_uniquear1ar2 是两个 NumPy 数组。assume_unique 是一个可选的布尔参数。其默认值为 False。当其为 True 时,则假定两个输入数组是唯一的,并且此假设可以加快计算时间。

setdiff1d() 返回 ar1 中不在 ar2 中的唯一值。

请参考以下代码。

import numpy as np

myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
indexes = [3, 5, 7]
modifiedArray = np.setdiff1d(myArray, indexes)
print(modifiedArray)

输出:

[ 1  2  4  6  8  9 10]

numpy.delete() 不同,这两个数组都是 NumPy 数组,其中包含实际元素,但没有索引。

要了解有关此函数的更多信息,请参阅此函数的官方文档

作者: Vaibhav Vaibhav
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.