基于 NumPy 的高效數值計算技術解析與實踐指引

在數據處理與科學計算領域,高效是核心訴求。NumPy 作為 Python 生態高效數值計算的基石,以高性能多維數組對象及配套函數,成為數據從業者的必備工具。其數組支持算術、比較、邏輯等豐富運算,通過向量化操作直接處理每個元素,無需循環,大幅提升代碼效率與簡潔度。

算術運算

NumPy 數組可以直接進行加減乘除等算術運算,運算規則是對應元素之間進行操作。

a = np.array([1, 2, 3, 4, 5])b = np.array([6, 7, 8, 9, 10])# 加法print(a + b) # 輸出:[ 7 9 11 13 15]# 減法print(b - a) # 輸出:[5 5 5 5 5]# 乘法print(a * b) # 輸出:[ 6 14 24 36 50]# 除法print(b / a) # 輸出:[6. 3.5 2.66666667 2.25 2. ]

此外,NumPy 還提供了豐富的數學函數來進行算術運算,如 np.add()、np.subtract()、np.multiply()、np.divide() 等,它們的功能與運算符類似。

print(np.add(a, b)) # 輸出:[ 7 9 11 13 15],與 a + b 效果相同

比較運算

數組的比較運算會返回一個布爾類型的數組,其中每個元素表示對應位置的元素是否滿足比較條件。

a = np.array([1, 3, 5, 7, 9])b = np.array([2, 3, 6, 7, 8])print(a > b) # 輸出:[False False False False True]print(a == b) # 輸出:[False True False True False]print(a <= b) # 輸出:[ True True True True False]

邏輯運算

NumPy 提供了 np.logical_and()、np.logical_or()、np.logical_not() 等函數來進行邏輯運算。

a = np.array([True, True, False, False])b = np.array([True, False, True, False])print(np.logical_and(a, b)) # 輸出:[ True False False False]print(np.logical_or(a, b)) # 輸出:[ True True True False]print(np.logical_not(a)) # 輸出:[False False True True]

廣播機制

在 NumPy 中,形狀不同的數組運算會觸發廣播機制,它能自動擴展小數組,實現元素級運算。

廣播需遵循兩條規則:

  1. 維度數不同時,給維度少的數組前面補維,直至維度數一致。
  1. 各維度上,數組大小相同或其中一個為 1 才能廣播,否則報錯。

廣播示例如下:

# 示例 1:一維數組與標量運算a = np.array([1, 2, 3, 4, 5])b = 2print(a + b) # 輸出:[3 4 5 6 7],標量 b 被廣播為與 a 形狀相同的數組 [2, 2, 2, 2, 2]# 示例 2:二維數組與一維數組運算a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])b = np.array([10, 20, 30])print(a + b)# 輸出:# [[11 22 33]# [14 25 36]# [17 28 39]]# 一維數組 b 被廣播為與 a 形狀相同的二維數組 [[10, 20, 30], [10, 20, 30], [10, 20, 30]]# 示例 3:形狀兼容的二維數組運算a = np.array([[1, 2], [3, 4], [5, 6]]) # 形狀為 (3, 2)b = np.array([[10], [20], [30]]) # 形狀為 (3, 1)print(a * b)# 輸出:# [[ 10 20]# [ 60 80]# [150 180]]# 數組 b 被廣播為形狀 (3, 2) 的數組 [[10, 10], [20, 20], [30, 30]]

NumPy 的常用函數

NumPy 提供了大量的常用函數,用于數組的統計分析、數學計算等。

統計函數

  • np.sum():計算數組元素的總和。
a = np.array([[1, 2, 3], [4, 5, 6]])print(np.sum(a)) # 輸出:21(所有元素的總和)print(np.sum(a, axis=0)) # 輸出:[5 7 9](按列求和)print(np.sum(a, axis=1)) # 輸出:[6 15](按行求和)
  • np.mean():計算數組元素的平均值。
a = np.array([1, 2, 3, 4, 5, 6])print(np.mean(a)) # 輸出:3.5
  • np.max() 和 np.min():分別計算數組元素的最大值和最小值。
a = np.array([[7, 2, 9], [4, 8, 3]])print(np.max(a)) # 輸出:9print(np.min(a, axis=0)) # 輸出:[4 2 3](按列求最小值)
  • np.std() 和 np.var():分別計算數組元素的標準差和方差。
a = np.array([1, 2, 3, 4, 5])print(np.std(a)) # 輸出:1.41421356...print(np.var(a)) # 輸出:2.0

數學函數

  • np.sqrt():計算數組元素的平方根。
a = np.array([4, 9, 16, 25])print(np.sqrt(a)) # 輸出:[2. 3. 4. 5.]
  • np.exp():計算數組元素的指數(e 的冪)。
a = np.array([1, 2, 3])print(np.exp(a)) # 輸出:[ 2.71828183 7.3890561 20.08553692]
  • np.log()、np.log2()、np.log10():分別計算自然對數、以 2 為底的對數和以 10 為底的對數。
a = np.array([1, 2, 4, 10])print(np.log(a)) # 輸出:[0. 0.69314718 1.38629436 2.30258509]print(np.log2(a)) # 輸出:[0. 1. 2. 3.32192809]print(np.log10(a)) # 輸出:[0. 0.30103 0.60205999 1. ]

其他常用函數

  • np.argmax() 和 np.argmin():分別返回數組中最大值和最小值的索引。
a = np.array([[3, 1, 4], [2, 5, 0]])print(np.argmax(a)) # 輸出:4(最大值 5 在數組展平后的索引)print(np.argmin(a, axis=1)) # 輸出:[1 2](按行找最小值的索引)
  • np.unique():返回數組中唯一的元素,并排序。
a = np.array([2, 1, 3, 2, 1, 4, 5, 4])print(np.unique(a)) # 輸出:[1 2 3 4 5]
  • np.sort():對數組進行排序。
a = np.array([[3, 1, 4], [2, 5, 0]])print(np.sort(a)) # 輸出:[[1 3 4] [0 2 5]](按行排序)print(np.sort(a, axis=0)) # 輸出:[[2 1 0] [3 5 4]](按列排序)

NumPy 與其他庫的結合

NumPy 作為 Python 科學計算的基礎庫,經常與其他庫結合使用,發揮更強大的功能。

與 Matplotlib 結合

Matplotlib 是 Python 中常用的繪圖庫,它可以與 NumPy 無縫配合,繪制各種圖表。

import numpy as npimport matplotlib.pyplot as plt# 生成數據x = np.linspace(0, 2 * np.pi, 100)y = np.sin(x)# 繪制正弦曲線plt.plot(x, y)plt.title('Sine Curve')plt.xlabel('x')plt.ylabel('sin(x)')plt.show()

與 Pandas 結合

Pandas 是基于 NumPy 構建的數據分析庫,它的 Series 和 DataFrame 數據結構本質上都是基于 NumPy 的數組。在 Pandas 中,可以方便地將數據轉換為 NumPy 數組進行處理。

import numpy as npimport pandas as pd# 創建 DataFramedf = pd.DataFrame({'A': [1, 2, 3], 'B': [4, 5, 6]})# 轉換為 NumPy 數組arr = df.valuesprint(arr)# 輸出:# [[1 4]# [2 5]# [3 6]]

NumPy 的高級應用

除了上述基礎內容,NumPy 還有許多高級應用,如線性代數運算、隨機數生成等。

線性代數運算

NumPy 的 linalg 模塊提供了豐富的線性代數運算函數。

  • np.linalg.dot():計算兩個數組的點積。
a = np.array([[1, 2], [3, 4]])b = np.array([[5, 6], [7, 8]])print(np.linalg.dot(a, b))# 輸出:# [[19 22]# [43 50]]
  • np.linalg.inv():計算矩陣的逆矩陣(僅適用于方陣)。
a = np.array([[1, 2], [3, 4]])inv_a = np.linalg.inv(a)print(inv_a)# 輸出:# [[-2. 1. ]# [ 1.5 -0.5]]
  • np.linalg.eig():計算方陣的特征值和特征向量。
a = np.array([[1, 2], [3, 4]])eigenvalues, eigenvectors = np.linalg.eig(a)print("特征值:", eigenvalues) # 輸出:特征值: [-0.37228132 5.37228132]print("特征向量:\n", eigenvectors)# 輸出:特征向量:# [[-0.82456484 -0.41597356]# [ 0.56576746 -0.90937671]]

隨機數生成

NumPy 的 random 模塊提供了多種生成隨機數的函數。

  • np.random.rand():生成 [0,1) 之間的隨機數。
# 生成形狀為 (2, 3) 的隨機數組print(np.random.rand(2, 3))# 輸出(每次運行結果可能不同):# [[0.4618034 0.01623568 0.85273445]# [0.49533646 0.89013761 0.97617472]]
  • np.random.randint():生成指定范圍內的隨機整數。
# 生成形狀為 (3, 2),范圍在 [1, 10) 的隨機整數print(np.random.randint(1, 10, size=(3, 2)))# 輸出(每次運行結果可能不同):# [[5 3]# [7 9]# [2 6]]
  • np.random.normal():生成符合正態分布的隨機數。
# 生成形狀為 (1, 5),均值為 0,標準差為 1 的正態分布隨機數print(np.random.normal(0, 1, size=(1, 5)))# 輸出(每次運行結果可能不同):# [[-0.3264997 -0.76003135 0.22776465 1.44944949 0.42473946]]

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/92343.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/92343.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/92343.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Kafka MQ 控制器 broker

Kafka MQ 控制器 broker 1 控制器broker的選舉 在 Kafka 集群中會有一個或多個 broker,其中有一個 broker 會被選舉為控制器(Kafka Controller)?,它負責管理整個集群中所有分區和副本的狀態。當某個分區的leader副本出現故障時,由控制器負責為該分區選舉新的leader副本…

50天50個小項目 (Vue3 + Tailwindcss V4) ? | ImageCarousel(圖片輪播組件)

&#x1f4c5; 我們繼續 50 個小項目挑戰&#xff01;—— ImageCarousel組件 倉庫地址&#xff1a;https://github.com/SunACong/50-vue-projects 項目預覽地址&#xff1a;https://50-vue-projects.vercel.app/ 使用 Vue 3 的 <script setup> 語法以及 Tailwind CSS …

基于springboot的智能物流管理系統(源碼+論文)

一、開發環境 MYSQL數據庫 MySQL是一個真正的多用戶、多線程SQL數據庫服務器&#xff0c;基于SQL的客戶/服務器模式的關系數據庫管理系統。其特點包括&#xff1a; 功能強大&#xff1a;支持多用戶、多線程操作。使用簡單&#xff1a;管理方便&#xff0c;安全可靠性高。跨平…

Collection接口的詳細介紹以及底層原理——包括數據結構紅黑樹、二叉樹等,從0到徹底掌握Collection只需這篇文章

目錄 Collection簡介 Collection的遍歷方式 迭代器遍歷 增強for遍歷 Lambda表達式遍歷 List集合 List集合的遍歷方式 列表迭代器遍歷以及普通for循環 數據結構 棧 隊列 數組 鏈表 單向鏈表 雙向鏈表 二叉樹 遍歷方式 普通二叉樹 二叉查找樹 平衡二叉樹 旋轉…

《安順棒壘球》世界十大運動·棒球1號位

Worlds Top 10 Sports for Newbies | 棒球排第幾&#xff1f; 全球青訓體系大揭秘 ?添加圖片注釋&#xff0c;不超過 140 字&#xff08;可選&#xff09;神王棒球世界十大運動排名 Top 10 Global Sports&#xff08;按參與度/商業價值/影響力綜合排序&#xff09;足球 Footba…

什么是“差分“?

1. 什么是"差分"&#xff1f;想象兩個人在玩蹺蹺板&#xff1a;當兩人同時向上跳&#xff08;同向移動&#xff09;→ 蹺蹺板不動 → 這叫"共模"當一人向上&#xff0c;另一人向下&#xff08;反向移動&#xff09;→ 蹺蹺板傾斜 → 這叫"差分"差…

4.組合式API知識點(2)

10 組合式API - 模版引用模板引用的概念如何使用&#xff08;以獲取dom為例 組件同理&#xff09;組件實例對象defineExpose()11 組合式API - provide和inject作用和場景跨層傳遞普通數據跨層傳遞響應式數據跨層傳遞方法需求解決思考

GitLab企業版部署與許可證生成完整指南

GitLab企業版部署與許可證生成完整指南一、背景二、環境準備三、部署步驟1. 創建目錄結構2. 生成GitLab許可證2.1 克隆許可證生成器2.2 修改生成器腳本2.3 構建Docker鏡像2.4 生成許可證文件3. 創建Docker Compose配置文件4. 啟動GitLab容器4.1 初始啟動4.2 修改GitLab配置4.3 …

Jenkins 不同節點間文件傳遞:跨 Job 與 同 Job 的實現方法

在日常的 DevOps 運維實踐中&#xff0c;Jenkins 通常被用于串聯多個自動化流程&#xff0c;而這些流程往往需要在不同的構建節點&#xff08;agent&#xff09;上執行。例如&#xff0c;在以下場景中&#xff1a; &#x1f4cc; 場景需求描述&#xff08;實際問題&#xff09;…

Java中AQS原理

一、核心架構&#xff1a;AQS抽象隊列同步器二、AQS核心機制1. 三大核心組件&#xff1a;state狀態變量&#xff1a;volatile int&#xff0c;表示鎖狀態&#xff08;0未鎖定&#xff0c;≥1鎖定/重入次數&#xff09;CLH隊列&#xff1a;雙向鏈表實現的線程等待隊列Node節點&a…

深入理解程序鏈接機制:靜態鏈接、ELF加載與動態庫實現原理

目錄 一、靜態鏈接 1、靜態鏈接的基本概念 1. 靜態鏈接實例分析 2. 目標文件分析 3. 關鍵觀察 4. 重定位機制 5. 注意事項 2、靜態鏈接過程詳解 1. 目標文件反匯編分析&#xff08;上面已分析&#xff09; 2. 符號表分析 code.o 符號表 hello.o 符號表 3. 鏈接后的…

python基礎復習

復習python基礎語法,最好能做到使用python 寫一些簡單的算法。 1基礎基礎語法 1.0 輸入輸出 一個實用的print:format函數print(站點列表 {0}, {1}, 和 {other}。.format(Google, Runoob, other=Taobao)) 站點列表 Google, Runoob, 和 Taobao。print("a", "b…

ZLMediaKit 入門

什么是ZLMediaKit&#xff1f; ZLMediaKit 是一個基于C11的高性能流媒體服務器框架&#xff0c;支持RTSP/RTMP/HLS/HTTP-FLV/WebSocket-FLV等多種流媒體協議。它具有以下特點&#xff1a; 跨平臺支持&#xff08;Linux、Windows、macOS&#xff09; 高性能&#xff0c;支持高…

接口測試Postman工具高級使用技巧

目錄 一、環境與變量的深度應用 多環境動態切換 動態變量與腳本生成 二、Pre-request Script 的妙用 參數簽名/加密 接口依賴處理 三、Test Script 的進階斷言 復雜 JSON Schema 校驗 數據庫斷言 四、數據驅動測試 CSV/JSON 文件驅動 動態生成測試用例 環境與變量的…

ZooKeeper學習專欄(四):單機模式部署與基礎操作詳解

文章目錄前言一、單機模式部署架構圖部署流程&#xff1a;二、zkCli.sh命令行工具基礎操作三、ACL權限控制實踐學習資源前言 本文是Zookeeper學習系列的第四篇&#xff0c;將詳細講解Zookeeper的單機模式部署過程以及基礎命令行操作&#xff0c;包括節點管理、Watcher機制和AC…

靜態登錄界面

代碼&#xff1a; <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-scale1.0"><title>用戶登錄</title><st…

Three.js 全景圖(Equirectangular Texture)教程:從加載到球面映射

全景圖(Equirectangular Texture)是一種特殊的 2D 圖像,能通過數學轉換模擬 360 環繞視角,常用于創建沉浸式環境(如虛擬全景、天空盒替代方案)。本文將通過完整示例,帶你掌握 Three.js 中全景圖的加載、映射原理與實際應用。 什么是全景圖(Equirectangular Texture)?…

Rocky Linux 9 快速安裝 Node.js

Rocky Linux 9 快速安裝 Node.js 大家好&#xff0c;我是星哥&#xff01;今天給大家帶來 Rocky Linux 9 環境下 Node.js 的安裝教程。 本文將詳細介紹兩種安裝方法&#xff0c;幫你快速搭建穩定的 Node.js 環境。 Node.js 是一個非常流行的 JavaScript 運行時環境&#xff…

.NET依賴注入IOC你了解嗎?

IOC在Web API 中是經常使用的&#xff0c;但是在一些WPF項目并不是經常使用或者被人熟知的&#xff0c;我把相關依賴注入的內容又做了一次學習和整理什么是依賴注入&#xff1f; 依賴注入是一種設計模式和軟件設計原則&#xff0c;用于實現 控制反轉。它的核心思想是&#xff1…

Python----大模型(基于Fastapi+streamlit的機器人對話)

一、準備工作 1.1、魔搭社區下載大模型 通義千問2.5-7B-Instruct 模型庫 from modelscope.hub.snapshot_download import snapshot_download llm_model_dir snapshot_download(Qwen/Qwen2.5-7B-Instruct,cache_dirmodels) 1.2、啟動vllm大模型 python -m vllm.entrypoint…