從 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.