NumPy 數組排序、過濾與隨機數生成詳解

来源:https://www.cnblogs.com/xiaowange/p/18202735
-Advertisement-
Play Games

本文介紹了NumPy中的數組排序和過濾功能。`np.sort()`函數用於對數組進行升序排序,對二維數組則按行排序。示例展示瞭如何對一維和二維數組排序。此外,還講解了使用布爾索引來過濾數組,以及直接在條件中操作數組以創建過濾後的數組。最後,介紹了NumPy的隨機數生成,包括整數、浮點數及特定分佈的隨... ...


NumPy 數組排序

排序數組

排序數組意味著將元素按特定順序排列。順序可以是數字大小、字母順序、升序或降序等。

NumPy 的 ndarray 對象提供了一個名為 sort() 的函數,用於對數組進行排序。

示例:

import numpy as np

arr = np.array([3, 2, 0, 1])

print(np.sort(arr))

輸出:

[0 1 2 3]

註意:

sort() 方法會返回數組的副本,原始數組不會被修改。
可以對字元串數組、布爾數組等其他數據類型進行排序。

排序二維數組

對於二維數組,sort() 方法會對每一行進行排序。

示例:

import numpy as np

arr = np.array([[3, 2, 4], [5, 0, 1]])

print(np.sort(arr))

輸出:

[[0 1 2]
 [3 4 5]]

練習

使用 NumPy 正確的方法對以下數組進行排序:

arr = np.array([3, 2, 0, 1])

x = np.sort(
    # 請在此處填寫代碼
)

print(x)

解答:

x = np.sort(arr)

NumPy 數組過濾

過濾數組

過濾數組是指從現有數組中選取部分元素,並創建新的數組。

在 NumPy 中,可以使用布爾索引列表來過濾數組。布爾索引列表是一個與數組索引相對應的布爾值列表。

如果索引處的值為 True,則該元素會被包含在過濾後的數組中;如果為 False,則會被排除。

示例:

import numpy as np

arr = np.array([41, 42, 43, 44])

x = [True, False, True, False]

newarr = arr[x]

print(newarr)

輸出:

[41 43]

解釋:

新數組 newarr 只包含 arr 中索引為 0 和 2 的元素,因為 x 對應索引處的值為 True

創建過濾數組

通常情況下,我們需要根據條件來創建過濾數組。

示例:

僅返回大於 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

filter_arr = arr > 42

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

輸出:

[False  True  True  True]
[43 44]

僅返回偶數元素:

import numpy as np

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

filter_arr = arr % 2 == 0

newarr = arr[filter_arr]

print(filter_arr)
print(newarr)

輸出:

[False  True  False  True  False  True  False]
[2 4 6]

直接從數組創建過濾

NumPy 提供了一種更簡潔的方式來創建過濾數組,即直接在條件中使用數組:

示例:

僅返回大於 42 的元素:

import numpy as np

arr = np.array([41, 42, 43, 44])

newarr = arr[arr > 42]

print(newarr)

輸出:

[43 44]

僅返回偶數元素:

import numpy as np

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

newarr = arr[arr % 2 == 0]

print(newarr)

輸出:

[2 4 6]

練習

使用 NumPy 的直接過濾方法,從以下數組中過濾出所有平方為偶數的元素:

import numpy as np

arr = np.

NumPy 中的隨機數

什麼是隨機數?

隨機數是指無法通過確定性方法預測其值的數據。通常情況下,隨機數是指在一定範圍內均勻分佈的數字。

在電腦中,由於程式的確定性,不可能生成真正的隨機數。因此,通常使用偽隨機數來代替隨機數。偽隨機數是通過演算法生成的,但看起來像隨機數。

NumPy 中的隨機數生成

NumPy 提供了 random 模塊用於生成隨機數。該模塊提供了多種方法,可以生成不同類型和分佈的隨機數。

生成隨機整數

randint(low, high, size):生成指定範圍內的隨機整數。
low:下限,預設為 0。
high:上限,不包括上限本身。
size:輸出數組的形狀。

示例:

import numpy as np

# 生成 10 個介於 0 和 100 之間的隨機整數
x = np.random.randint(0, 101, size=10)
print(x)

生成隨機浮點數

rand(size):生成介於 0 和 1 之間的隨機浮點數。
size:輸出數組的形狀。

示例:

import numpy as np

# 生成 5 個隨機浮點數
x = np.random.rand(5)
print(x)

從數組中生成隨機數

choice(a, size, replace):從數組 a 中隨機選擇元素。
a:源數組。
size:輸出數組的形狀。
replace:是否允許重覆選擇元素,預設為 False

示例:

import numpy as np

# 從數組 [1, 2, 3, 4, 5] 中隨機選擇 3 個元素
x = np.random.choice([1, 2, 3, 4, 5], size=3)
print(x)

生成指定分佈的隨機數

NumPy 還提供了其他方法來生成特定分佈的隨機數,例如正態分佈、均勻分佈、指數分佈等。

randn(size):生成服從標準正態分佈的隨機數。
randm(size):生成服從均勻分佈的隨機整數。
beta(a, b, size):生成服從 Beta 分佈的隨機數。
gamma(shape, scale, size):生成服從 Gamma 分佈的隨機數。
poisson(lam, size):生成服從泊松分佈的隨機整數。

例如,生成 10 個服從標準正態分佈的隨機數:

import numpy as np

x = np.random.randn(10)
print(x)

練習

  1. 使用 randint 方法生成一個包含 20 個介於 100 到 200 之間的隨機整數的數組。
  2. 使用 rand 方法生成一個包含 15 個介於 0 和 1 之間的隨機浮點數的數組。
  3. 從數組 [1, 3, 5, 7, 9] 中隨機選擇 10 個元素,並允許重覆。
  4. 生成 5 個服從標準正態分佈的隨機數。

解決方案

import numpy as np

# 1. 使用 randint 方法生成隨機整數數組
random_ints = np.random.randint(100, 201, size=20)
print(random_ints)

# 2. 使用 rand 方法生成隨機浮點數數組
random_floats = np.random.rand(15)
print(random_floats)

# 3. 從數組中隨機選擇元素
random_elements = np.random.choice([1, 3, 5, 7, 9], size=10, replace=True)
print(random_elements)

# 4. 生成服從標準正態分佈的隨機數
normal_randoms = np.random.randn(5)
print(normal_randoms)

最後

為了方便其他設備和平臺的小伙伴觀看往期文章:

微信公眾號搜索:Let us Coding,關註後即可獲取最新文章推送

看完如果覺得有幫助,歡迎點贊、收藏、關註


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

-Advertisement-
Play Games
更多相關文章
  • vue3+uniapp多端自定義table組件|uniapp加強版綜合表格組件 uv3-table:一款基於uniapp+vue3跨端自定義手機端增強版表格組件。支持固定表頭/列、邊框、斑馬紋、單選/多選,自定義表頭/表體插槽、左右固定列陰影高亮顯示。支持編譯相容H5+小程式端+App端。 如下圖: ...
  • 一、事件與事件流 javascript中的事件,可以理解就是在HTML文檔或者瀏覽器中發生的一種交互操作,使得網頁具備互動性, 常見的有載入事件、滑鼠事件、自定義事件等 由於DOM是一個樹結構,如果在父子節點綁定事件時候,當觸發子節點的時候,就存在一個順序問題,這就涉及到了事件流的概念 事件流都會經 ...
  • 在前端開發過程中,調試的時候,我門會使用 console.log 等方式查看數據。但對於圖片來說,僅靠展示的數據與結構,是無法想象出圖片最終呈現的樣子的。 雖然我們可以把圖片數據通過 img 標簽展示到頁面上,或將圖片下載下來進行預覽。但這樣的調試過程實在是複雜,何不實現一個 console.im... ...
  • 目錄又被攻擊了?事實還原怎樣避免被攻擊 又被攻擊了? 前段時間每天早上都被阿裡雲的報警簡訊和郵件叫醒,給看一下記錄。 事實還原 我當時以為是有幾篇被其他博主轉發了文章,導致被知名度(狗頭)上升,被人盯上了。每天早上 6、7點手機就開始報警。上一篇文章發出去後,也收到很多小伙伴的支持。 進過分析,觸發 ...
  • 工業互聯網甄選聯盟自發佈委員會管理制度以來,得到了廣大朋友的支撐。經過反覆溝通和醞釀,最終形成《基於工業互聯網平臺智能製造方案》。在今後的實踐過程中會不斷完善本方案。現在入選4家會員單位,後續再不斷擇優選取腳踏實地為生產企業服務的公司。 ...
  • 1. Spring 對 Junit4,Junit5 的支持上的運用 @目錄1. Spring 對 Junit4,Junit5 的支持上的運用每博一文案2. Spring對Junit4 的支持3. Spring對Junit5的支持4. 總結:5. 最後: 每博一文案 關於理想主義,在知乎上看到一句話: ...
  • >>上一篇(文科生在三本院校,讀電腦專業) 2015年9月,我入學了。 我期待的大學生活是多姿多彩的,我會參加各種社團,參與各種有意思的活動。 但我是個社恐,有過嘗試,但還是難以融入各種社交活動。 學習,我是有想過的。 學校開設的C++課程已經上了一段時間,但我無法理解雙層for迴圈執行過程、亦無 ...
  • title: Django性能優化:提升載入速度 date: 2024/5/20 20:16:28 updated: 2024/5/20 20:16:28 categories: 後端開發 tags: 緩存策略 HTTP請求 DNS查詢 CDN分發 前端優化 伺服器響應 瀏覽器緩存 第一章:Djan ...
一周排行
    -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.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...