從numpy陣列中取出滿足條件的元素示例

2022-10-04 15:45:28 字數 2312 閱讀 8417

例如問題:從 arr 陣列中提取所有奇數元素。

input:arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

output: #> array([1, 3, 5, 7, 9])

solution:

#input

>>> arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

程式設計客棧#solution

arr = arr[arr % 2 == 1]

>>> array([1, 3, 5, 7, 9])

這是對奇數元素的提取,其他條件同理,在這個問題上我們深入再學習一下,首先 numpy 中的 array 陣列是可以直接對陣列中的每個元素進行處理的。例如我們想對每個元素減一:

#input

>>> arr = np.array([0, 1, 2, 3, 4, 5, 6, 7, 8,程式設計客棧 9])

#solution

>>> arr

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> arr - 1

array([-1, 0, 1, 2, 3, 4, 5, 6, 7, 8])

從上面的例子我們可以看出來,對 arr 直接進行減一操作,結果是對每乙個元素都進行了減一的操作,陣列的維度不變,為了滿足取出特定條件的元素這個操作,我們可以進行條件判斷,例如判斷每個元素是否為奇數:

#input

>>> arr = np.arange(10)

>>> arr

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

#solution

>>> arr % 2 == 1

array([false, true, false, true, false, true, false, true, false, true])

由此可見,條件判斷後輸出為和 arr 相同維度的陣列,但是其中每個元素為布林類程式設計客棧型的值,取值為陣列 arr 對每個元素分別進行條件判斷的結果。

下面我們分析對 arr 陣列進行特定取值,給其乙個布林型別的 arr 陣列,並且維度與 arr 相同,以此得到取值的目的:

#input

>>> arr_bool = np.array([1, 1, 0, 0, 1, 1, 0, 0, 1, 1], dtype=bool)

>>> arr_bool

array([ true, true, false, false, true, true, false, false, true, true])

#solution

>>> arr[arr_bool]

array([0, 1, 4, 5, 8, 9])

從上述例子,我們構建了乙個布林型別的陣列為 arr_bool ,並且維度與 arr 相同,進行直接嵌入實現了取值,以此完成了我們最終的目的,可以對任意滿足條件的元素進行提取。並且理解了其中的原理。

ps:番外篇,如果維度不同可以嗎?

#input

>>> arr_bool = np.ones(11, dtype=bool)

>>> arr_bool

array([ true, true, true, true, true, true, true, true, true, true, true]) #注意!!這裡有11個 true 哦。

#solution

>>> arr[arr_bool]

traceback (most recent call last):

file "", line 1, in

indexerror: booleidxzzjbpyan index did not match indexed array along dimension 0; dimension is 10 but corresponding boolean dimension is 11

由上可見,維度必須保持一致,從 arr 陣列裡才可以按照 bool 型別取出對應位置為 true 的元素。這個性質幫助我們可以更靈活的處理 numpy 陣列。

ps2: 如何替換滿足條件的元素為其它值呢?

>>> arr = np.arange(10)

>>> arr

array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9])

>>> arr[arr%2 == 1] = -1

>&www.cppcns.comgt;> arr

array([ 0, -1, 2, -1, 4, -1, 6, -1, 8, -1])

本文標題: 從numpy陣列中取出滿足條件的元素示例

本文位址:

找到滿足條件的陣列

給定函式d n n n的各位之和,n為正整數,如d 78 78 7 8 93。這樣這個函式可以看成乙個生成器,如93可以看成由78生成。定義數a 數a找不到乙個數b可以由d b a,即a不能由其他數生成。現在要寫程式,找出1至10000裡的所有符合數a定義的數。先申請乙個長度為10000的bool陣...

從JDBC中取出資料

首先要建立連線,為了在第二次鏈結的時候,不用重新建立connection 浪費,所以在建立連線的時候,先判斷當前物件的conn是否為null,是才進行建立,否則直接使用已有。private static connection conn null public connection getconnec...

從Cygwin中取出MinGW for GCC

cygwin內含mingw,於是就把原有的mingw解除安裝了。但是由於某種原因 原因在最後介紹 gcc在windows命令列下就不起作用了 執行後並不產生編譯結果 即使path設定正確。採用掩蔽dll的方法。將gcc放置於乙個新建的資料夾,並執行,會出現缺失dll,逐個加上這些dll後能執行通過,...