【numpy基礎】--數組過濾

来源:https://www.cnblogs.com/wang_yb/archive/2023/06/29/17515408.html
-Advertisement-
Play Games

在`numpy`中,數組可以看作是一系列數值的有序集合,可以通過下標訪問其中的元素。處理數組的過程中,經常需要用到數組過濾功能。 過濾功能可以在處理數據時非常有用,因為它可以使數據更加乾凈和可讀性更強。例如,在進行數據分析時,通常需要去除異常值,過濾掉不必要的元素可以使數據更加易於分析和處理。 `n ...


numpy中,數組可以看作是一系列數值的有序集合,可以通過下標訪問其中的元素。
處理數組的過程中,經常需要用到數組過濾功能。

過濾功能可以在處理數據時非常有用,因為它可以使數據更加乾凈和可讀性更強。
例如,在進行數據分析時,通常需要去除異常值,過濾掉不必要的元素可以使數據更加易於分析和處理。

numpy本身提供了很多針對特定要求的過濾函數,
不過本篇只介紹最基本的過濾方式,通過最基本的過濾方式來揭示其過濾的原理。

1. 比較

比較是過濾的前提,因為通過比較才能確定過濾的條件。

1.1. 數組和單個數字

import numpy as np

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#運行結果
[[4 1 4]
 [7 6 1]
 [8 9 5]]

print(arr > 5)
#運行結果
[[False False False]
 [ True  True False]
 [ True  True False]]

數組和單個數字比較,也滿足上一篇介紹的廣播原則,也就是數組arr的每個元素都和數字5進行了比較。

比較的結果是和arr相同結構的數組,數組中的元素是bool值。
滿足比較條件是True不滿足比較條件的是False

1.2. 數組和數組

除了和單個數字比較之外,數組之間也是可以比較的。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[9 7 3]
 [2 8 5]
 [2 2 3]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[1 6 0]
 [0 1 8]
 [9 0 5]]

print(arr1 > arr2)
#運行結果
[[ True  True  True]
 [ True  True False]
 [False  True False]]

數組之間的比較就是相同位置的元素之間比較,如果兩個數組的結構不一樣,會按照上一篇介紹的廣播計算方式來擴充數組。
比如:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[9 6 0]
 [1 4 9]
 [1 1 4]]

arr2 = np.random.randint(0, 10, (3, 1))
print(arr2)
#運行結果
[[1]
 [0]
 [9]]

print(arr1 > arr2)
#運行結果
[[ True  True False]
 [ True  True  True]
 [False False False]]

上面的數組arr2,按廣播規則被擴充成:

[[1 1 1]
[0 0 0]
[9 9 9]]

2. 掩碼

所謂掩碼,其實就是上面的各個示例中的比較結果。
也就是只包含bool值的數組,比如:

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

我們就是根據這個掩碼,來過濾出數組中的True 或者 False 位置的元素。

3. 過濾

過濾就是根據掩碼,選擇出符合條件的元素。

3.1. 單條件過濾

arr = np.random.randint(0, 10, (3, 3))
print(arr)
#運行結果
[[8 4 0]
 [2 2 9]
 [9 5 9]]

print(arr[arr > 5])
#運行結果
[8 9 9 9]

最後得到的是arr中值大於5的元素數組。
其中 arr > 5 的結果就是上一節提到的掩碼,最後過濾出的元素就是根據這個掩碼得到的。

除了跟單獨的數字比較,也可以和數組比較:

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[3 4 7]
 [4 6 2]
 [7 2 1]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[2 3 1]
 [7 7 7]
 [1 6 4]]

print(arr1[arr1 > arr2])
#運行結果
[3 4 7 7]

3.2. 多條件過濾

多條件過濾使用 &| 來連接不同的條件。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) & (arr1 > arr2)])
#運行結果
[7 9]

過濾arr1大於5** 並且 **對應位置比arr2大的元素。

arr1 = np.random.randint(0, 10, (3, 3))
print(arr1)
#運行結果
[[1 0 5]
 [7 4 9]
 [8 5 4]]

arr2 = np.random.randint(0, 10, (3, 3))
print(arr2)
#運行結果
[[6 4 1]
 [0 1 1]
 [8 5 8]]

print(arr1[(arr1 > 5) | (arr1 > arr2)])
#運行結果
[5 7 4 9 8]

過濾arr1大於5** 或者 **對應位置比arr2大的元素。

4. 總結回顧

本篇主要介紹了過濾的基本原理,首先從比較開始,比較的結果是掩碼,最後通過掩碼過濾數組。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 本系列文章是為學習Vue的項目練習筆記,儘量詳細記錄一下一個完整項目的開發過程。面向初學者,本人也是初學者,搬磚技術還不成熟。項目在技術上前端為主,包含一些後端代碼,從基礎的資料庫(Sqlite)、到後端服務Node.js(Express),再到Web端的Vue,包含服務端、管理後臺、商城網站、小程... ...
  • 作為一個前端語言,Javascript從最初只是用來寫頁面,到如今的移動終端、後端服務、神經網路等等,它變得幾乎無處不在。如此廣闊的應用領域,對語言的安全性、健壯性以及可維護性都有了更高的要求。儘管ECMAScript標準在近幾年有了長足的進步,但是在類型檢查方面依然毫無建樹。在這種情況下TypeS... ...
  • 最終成果,實現了一個可運行的核心路由工程:柏成/vue-router3.x。地址如下:https://gitee.com/lbcjs/vue-router3.x ...
  • 摘要:在本文中,我們將介紹如何使用Vue3和Spring Framework進行開發,並創建一個簡單的TodoList應用程式。 本文分享自華為雲社區《Vue3搭配Spring Framework開發【Vue3應用程式實戰】》,作者:黎燃。 一、介紹 Vue3和Spring Framework都是現 ...
  • 作者總結這些年在支付寶做架構的經驗,把自己摸索成長的內容寫下來,從對架構師的認知到業務能力和架構能力多方面總結了案例經驗,希望可以幫助到大家。 ...
  • 歡迎來到本篇文章,書接上回,本篇說說 Spring 中的依賴註入,包括註入的方式,寫法,該選擇哪個註入方式以及可能出現的迴圈依賴問題等內容。 如果正在閱讀的朋友還不清楚什麼是「依賴」,建議先看看我第一篇文章,通過 Employee 和 Department 簡單說了什麼是所謂的依賴。 ...
  • # 6 sleep與yield的比較 ## sleep 1. 調用 sleep 會讓當前線程從 *Running* 進入 *Timed Waiting* 狀態(阻塞) 2. 其它線程可以使用 interrupt 方法打斷正在睡眠的線程,這時 sleep 方法會拋出 InterruptedExcept ...
  • 某日二師兄參加XXX科技公司的C++工程師開發崗位第29面: > 面試官:什麼是構造函數? > > 二師兄:構造函數是一種特殊的成員函數,用於創建和初始化類的對象。構造函數的名稱與類的名稱相同,並且沒有返回類型。構造函數在對象被創建時自動調用。 ```c++ struct Foo { Foo(int ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...