深入理解 NumPy:Python 科學計算的基石

在數據科學、人工智能和科學計算的世界里,NumPy 是一塊繞不過去的基石。它是 Python 語言中用于高性能科學計算的基礎包,幾乎所有的數據分析與機器學習框架(如 Pandas、TensorFlow、Scikit-learn)都離不開它的支持。

一、什么是 NumPy?

NumPy(Numerical Python)是一個開源的 Python 庫,主要用于支持大型多維數組與矩陣運算,同時提供了大量的數學函數庫用于對這些數組進行操作。其核心數據結構是 ndarray,一個多維數組對象。

NumPy 的優勢:

  • 更高效的數據存儲與計算性能

  • 支持廣播(broadcasting)機制

  • 豐富的線性代數、傅里葉變換與隨機數生成工具

  • 與 C、C++ 和 Fortran 的接口優秀,支持底層擴展


二、NumPy 安裝

安裝 NumPy 最簡單的方法是使用 pip 或 conda:

pip install numpy
# 或者使用 Anaconda
conda install numpy

安裝完成后可以這樣導入:

import numpy as np

三、NumPy 核心數據結構:ndarray

1. 創建 ndarray

import numpy as npa = np.array([1, 2, 3])               # 一維數組
b = np.array([[1, 2], [3, 4]])        # 二維數組
c = np.zeros((2, 3))                  # 全 0 數組
d = np.ones((2, 3))                   # 全 1 數組
e = np.eye(3)                         # 單位矩陣
f = np.arange(0, 10, 2)               # 生成等差序列
g = np.linspace(0, 1, 5)              # 生成等距分布的數

2. 數組屬性

print(a.shape)      # 數組維度
print(a.ndim)       # 維數
print(a.dtype)      # 元素類型
print(a.size)       # 元素個數

四、數組操作

1. 數組索引與切片

arr = np.array([[1, 2, 3], [4, 5, 6]])print(arr[0, 2])       # 獲取第一行第三列的元素
print(arr[:, 1])       # 獲取所有行的第二列
print(arr[1, :2])      # 獲取第二行的前兩列

2. 數組形狀變換

a = np.arange(6)           # [0, 1, 2, 3, 4, 5]
a = a.reshape((2, 3))      # 轉換為 2 行 3 列
a.T                        # 轉置
a.flatten()                # 展平成一維

3. 數組合并與拆分

a = np.array([[1, 2], [3, 4]])
b = np.array([[5, 6]])# 合并
np.vstack((a, b))          # 豎直堆疊
np.hstack((a, a))          # 水平堆疊# 拆分
np.split(a, 2, axis=0)     # 沿第 0 軸拆分

五、廣播機制(Broadcasting)

NumPy 可以讓不同形狀的數組在一起執行運算,前提是它們遵循廣播規則:

a = np.array([1, 2, 3])
b = 2
print(a + b)      # 輸出:[3, 4, 5]A = np.ones((2, 3))
B = np.array([1, 2, 3])
print(A + B)      # 每一行加上 [1, 2, 3]

六、常用函數

1. 數學函數

a = np.array([1, 2, 3])np.sqrt(a)
np.exp(a)
np.log(a)
np.sin(a)

2. 聚合函數

a = np.array([[1, 2], [3, 4]])np.sum(a)
np.mean(a)
np.std(a)
np.max(a, axis=0)
np.min(a, axis=1)

七、線性代數操作

NumPy 擁有強大的線性代數模塊:

from numpy.linalg import inv, det, eig, solveA = np.array([[1, 2], [3, 4]])inv(A)         # 求逆
det(A)         # 行列式
eig(A)         # 特征值與特征向量
b = np.array([5, 6])
solve(A, b)    # 解線性方程 Ax = b

八、隨機數生成

np.random.seed(0)            # 設置隨機種子
np.random.rand(2, 3)         # 均勻分布
np.random.randn(2, 3)        # 正態分布
np.random.randint(0, 10, 5)  # 整數
np.random.choice([1, 2, 3], size=4)

九、實際應用示例:矩陣回歸模型

# 簡單的線性回歸計算示例: y = Xβ
X = np.array([[1, 1], [1, 2], [1, 3]])
y = np.array([1, 2, 3])# 最小二乘解: β = (X.T X)^-1 X.T y
beta = np.linalg.inv(X.T @ X) @ X.T @ y
print("線性回歸系數:", beta)

輸出:

線性回歸系數: [0. 1.]

這說明模型 y = x 完全擬合了數據。


十、總結

NumPy 是 Python 科學計算的基礎設施。熟練掌握 NumPy,能幫助你寫出更高效、更簡潔的數值計算代碼,也為深入學習 Pandas、Scikit-learn、TensorFlow 等框架打下堅實的基礎。

建議的學習路徑:

  • 掌握 ndarray 的基本操作

  • 學會廣播和向量化操作

  • 理解數組運算的內存和性能特點

  • 嘗試用 NumPy 完成簡單的數值計算任務

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

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

相關文章

Java基礎(IO)

所有操作都在內存,不能長時間保存,IO主要在硬盤,可以長時間保存。 一、File類 File類被定義為文件和目錄路徑名的抽象表示形式,這是因為 File 類既可以表示文件也可以表示目錄,他們都通過對應的路徑來描述。 提供構…

仿正點原子驅動BMP280氣壓傳感器實例

文章目錄 前言 一、寄存器頭文件定義 二、設備樹文件中添加節點 三、驅動文件編寫 四、編寫驅動測試文件并編譯測試 總結 前言 本文驅動開發仿照正點原子的iic驅動實現,同時附上bmp280的數據手冊,可訪問下面的鏈接: BMP280_Bosch(博世…

論壇系統(中-1)

軟件開發 編寫公共代碼 定義狀態碼 對執?業務處理邏輯過程中可能出現的成功與失敗狀態做針對性描述(根據需求分析階段可以遇見的問題提前做出定義),?枚舉定義狀態碼,先定義?部分,業務中遇到新的問題再添加 定義狀態碼如下 狀態碼類型描…

E+H流量計通過Profibus DP主站轉Modbus TCP網關與上位機輕松通訊

EH流量計通過Profibus DP主站轉Modbus TCP網關與上位機輕松通訊 在現代工業自動化的廣闊舞臺上,Profibus DP與Modbus TCP這兩種通信協議各領風騷,它們在不同的應用場景中發揮著舉足輕重的作用。但工業生產的復雜性往往要求不同設備、系統之間能夠順暢溝…

服務器中存儲空間不足該怎么辦?

服務器作為存儲數據信息的重要網絡設備,隨著企業業務的不斷拓展,所需要存儲的數據信息也在不斷增加,最終會導致服務器中存儲空間不足,這不僅會影響到服務器系統性能,還會造成業務無法正常執行,那么&#xf…

C++23 views::chunk_by (P2443R1) 詳解

文章目錄 引言C23 范圍庫概述范圍視圖(Range Views)范圍算法(Range Algorithms)范圍適配器(Range Adapters) std::views::chunk_by 介紹基本概念特性使用場景 示例代碼簡單示例自定義謂詞示例 總結 引言 在…

零碳園區能源系統-多能互補體系

構建以可再生能源為核心的零碳園區能源系統,需整合光儲直柔、光伏發電、微電網、氫能與儲能技術,通過多能協同與智能調控實現能源生產、存儲、消費全鏈條優化。以下是系統性實施方案: 一、系統架構設計 1. 多能互補體系 (圖示&a…

elastic search學習

首先在自己電腦上安裝elastic search。安裝成功后,查看ES是否啟動成功。 安裝過程參考:ElasticSearch入門1: mac 安裝 - 霜井 - 博客園 安裝完成后,直接執行bin目錄中的elastic search命令后,就可以啟動成功! 在網頁…

mysql8常用sql語句

查詢結果帶行號 -- 表名為 mi_user, 假設包含列 id ,address SELECT ROW_NUMBER() OVER (ORDER BY id) AS row_num, t.id, t.address FROM mi_user t ; SELECT ROW_NUMBER() OVER ( ) AS row_num, t.id, t.address FROM mi_user t ; 更新某列數…

Memcached 服務搭建和集成使用的詳細步驟示例

以下是 Memcached 服務搭建和集成使用的詳細步驟示例: 一、搭建 Memcached 服務 安裝 Memcached Linux 系統 yum 安裝:執行命令 yum install -y memcached memcached-devel。源碼安裝 下載源碼:wget http://www.memcached.org/files/memcach…

2. 盒模型/布局模塊 - 響應式產品展示頁_案例:電商產品網格布局

2. 盒模型/布局模塊 - 響應式產品展示頁 案例&#xff1a;電商產品網格布局 <!DOCTYPE html> <html><head><meta charset"utf-8"><title></title></head><style type"text/css">:root {--primary-color…

Go基于plugin的熱更新初體驗

背景 對于一個部署在生產環境的項目來說&#xff0c;我們希望當代碼出現bug的時候&#xff0c;可以不用重啟進程而達到動態修改代碼的目的—— 這就是代碼熱部署&#xff01; 使用java做游戲服務器&#xff0c;最大的好處是&#xff0c;當代碼出現bug&#xff0c;可以直接熱…

【RabbitMQ】工作隊列和發布/訂閱模式的具體實現

文章目錄 建立連接工作隊列模式實現創建隊列和交換機生產者代碼消費者代碼運行程序啟動消費者啟動生產者 發布/訂閱模式實現創建隊列和交換機生產者代碼創建交換機聲明兩個隊列綁定隊列和交換機發送消息完整代碼 消費者代碼完整代碼 運行程序啟動生產者啟動消費者 建立連接 我…

Codeforces Round 998 (Div. 3)

A. Fibonacciness 題目大意 給你四個數字abde&#xff0c;讓你找到一個中間值c&#xff0c;問 a b c a b c abc &#xff0c; b c d b c d bcd &#xff0c; c d e c d e cde 最多能有幾個式子成立 解題思路 顯然最多就六種情況&#xff0c;暴力枚舉即可 代…

火山引擎發展初始

火山引擎是字節跳動旗下的云計算服務品牌&#xff0c;其云服務業務的啟動和正式商業化時間線如下&#xff1a; 1. **初期探索&#xff08;2020年之前&#xff09;** 字節跳動在早期為支持自身業務&#xff08;如抖音、今日頭條等&#xff09;構建了強大的基礎設施和技術中…

【認知思維】光環效應:第一印象的持久力量

什么是光環效應 光環效應&#xff08;Halo Effect&#xff09;是指人們傾向于讓對某人或某物的一個顯著特質的印象影響對其他特質的評價的認知偏差。簡單來說&#xff0c;當我們對某人的一個特質&#xff08;如外表、智力或某項技能&#xff09;形成積極印象時&#xff0c;我們…

Java Solon v3.3.0 發布(國產優秀應用開發基座)

Solon 框架&#xff01; Solon 是新一代&#xff0c;Java 企業級應用開發框架。從零開始構建&#xff08;No Java-EE&#xff09;&#xff0c;有靈活的接口規范與開放生態。采用商用友好的 Apache 2.0 開源協議&#xff0c;是“杭州無耳科技有限公司”開源的根級項目&#xff…

力扣-104.二叉樹的最大深度

題目描述 給定一個二叉樹 root &#xff0c;返回其最大深度。 二叉樹的 最大深度 是指從根節點到最遠葉子節點的最長路徑上的節點數。 class Solution { public:int maxDepth(TreeNode* root) {if(!root){return 0;}return max(maxDepth(root->left), maxDepth(root->…

單反和無反(私人筆記)

① 單反相機&#xff1a; 定義&#xff1a; 單反相機&#xff08;Single-Lens Reflex&#xff0c;SLR&#xff09;是一種帶有反光鏡結構的數碼相機。光線通過鏡頭進入后&#xff0c;先被反光鏡反射到五棱鏡/五面鏡&#xff0c;再通過取景器進入人眼。按下快門時&#xff0c;反…

超詳細講解C語言轉義字符\a \b \r \t \? \n等等

轉義字符 C語言有一組字符很特殊&#xff0c;叫做轉義字符&#xff0c;顧名思義&#xff0c;改變原來的意思的字符。 1 \? ??)是一個三字母詞&#xff0c;在以前的編譯器它會被編譯為] (??會被編譯為[ 因此在以前輸入(are you ok ??)就會被編譯為are you ok ] 解決這個…