過濾 NumPy 陣列中的元素
通常,我們需要特定的陣列值,通常是升序或降序。有時,我們還必須從陣列中搜尋元素,然後檢索它們或根據某些條件過濾某些值。
本文將介紹如何從 NumPy 陣列中過濾數值。
在 NumPy 中使用 fromiter()
方法過濾元素
fromiter()
從可迭代物件建立一個新的一維陣列,該陣列作為引數傳遞。我們可以將條件應用於輸入陣列元素,然後進一步將該函式賦予該新陣列,以在 NumPy 陣列中獲取所需的元素。
fromiter()
方法的語法如下。
fromiter(iterable, dtype, count, like)
它具有以下引數。
iterable
- 函式將對其進行迭代的可迭代物件。dtype
- 此引數引用返回陣列的資料型別。count
- 這是一個可選的整數引數,它表示將在可迭代物件中讀取的元素數。此引數的預設值為-1
,表示將讀取所有元素。like
- 這是一個可選的布林引數。它控制返回陣列的定義。
在 NumPy 中使用 fromiter()
方法過濾元素的方法如下。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray = np.fromiter(
(element for element in myArray if element < 6), dtype=myArray.dtype
)
print(myArray)
print(newArray)
輸出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
首先,我們初始化一個 NumPy 陣列,我們希望從該陣列中過濾元素。然後,我們遍歷整個陣列並過濾出小於 6
的值。然後,我們將此新陣列轉換為與原始陣列具有相同資料型別的 NumPy 陣列。
要了解有關此方法的更多資訊,請參考其官方文件
在 NumPy 中使用布林掩碼切分方法過濾元素
這種方法有點怪異,但在 NumPy 中卻像是一種魅力。我們必須提到陣列後方括號 []
內的條件。然後 NumPy 將根據條件過濾掉元素並返回一個新的過濾陣列。
這個概念可能不清楚,甚至對於某些人來說似乎很棘手,但請不要擔心。我們在下面有一些示例來對其進行更好的解釋。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[myArray < 6] # Line 1
newArray2 = myArray[myArray % 2 == 0] # Line 2
newArray3 = myArray[myArray % 2 != 0] # Line 3
newArray4 = myArray[np.logical_and(myArray > 1, myArray < 5)] # Line 4
newArray5 = myArray[np.logical_or(myArray % 2 == 0, myArray < 5)] # Line 5
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)
輸出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5]
[2 4 6 8]
[1 3 5 7 9]
[2 3 4]
[1 2 3 4 6 8]
如上所述,我們在方括號之間新增了一些條件,並根據這些條件對目標陣列進行了過濾。儲存陣列的變數(在本例中為 myArray
)代表方括號內陣列的單個元素。
為了應用多個條件並使用邏輯運算子,我們分別使用兩種 NumPy 方法,分別對邏輯 and
或 or
使用 logical_and()
和 logical_or()
。
myArray < 6
- 過濾小於 6 的值myArray % 2 == 0
- 過濾可被 2 整除的值myArray % 2 != 0
- 過濾不能被 2 整除的值np.logical_and(myArray > 1, myArray < 5)
- 過濾大於 1 且小於 5 的值。np.logical_or(myArray % 2 == 0, myArray < 5)
- 過濾可被二整除或小於五的值。
在 NumPy 中使用 where()
方法過濾元素
這是最後一個方法,它使用 [NumPy 庫中的 where()
方法)。它根據條件從目標陣列中篩選元素,並返回已篩選元素的索引。
你也可以使用此方法來更改滿足條件的元素的值。
where()
方法的語法如下所示。
where(condition, x, y)
它具有以下引數。
condition
- 這是布林條件,要檢查陣列的每個元素。x
- 它是賦予滿足條件的元素的值或滿足條件的元素上進行的計算。y
- 它是賦予不滿足條件的元素的值或對不滿意元素進行的計算。
讓我們看看如何使用此函式過濾掉元素。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = myArray[np.where(myArray < 7)[0]]
newArray2 = myArray[np.where(myArray % 2 == 0)[0]]
newArray3 = myArray[np.where(myArray % 2 != 0)[0]]
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
輸出:
[1 2 3 4 5 6 7 8 9]
[1 2 3 4 5 6]
[2 4 6 8]
[1 3 5 7 9]
在以上程式碼段中,所有滿足條件的元素都以陣列形式返回。
where()
函式返回 NumPy 陣列的元組。因此,我們只考慮第一個陣列,這就是我們的答案。
如上所述,你還可以分配自定義值,並在元素滿足指定條件時和不滿足條件時對元素執行自定義操作。
下面是一個例子。
import numpy as np
myArray = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9])
newArray1 = np.where(myArray < 7, 5, -1)
newArray2 = np.where(myArray % 2 == 0, myArray ** 2, 0)
newArray3 = np.where(myArray % 2 != 0, myArray, -1)
newArray4 = np.where(myArray % 2 != 0, myArray, myArray)
newArray5 = np.where(myArray % 2 != 0, 0, myArray)
print(myArray)
print(newArray1)
print(newArray2)
print(newArray3)
print(newArray4)
print(newArray5)
輸出:
[1 2 3 4 5 6 7 8 9]
[ 5 5 5 5 5 5 -1 -1 -1]
[ 0 4 0 16 0 36 0 64 0]
[ 1 -1 3 -1 5 -1 7 -1 9]
[1 2 3 4 5 6 7 8 9]
[0 2 0 4 0 6 0 8 0]
看一下輸出。檢視元素如何根據條件以及根據你提供的用於操縱 where()
函式的元素提供的值和計算而變化。