【機器學習學習筆記】numpy基礎2

零基礎小白的 NumPy 入門指南

如果你想用電競(打游戲)的思路理解編程:Python 是基礎操作鍵位,而 NumPy 就是 “英雄專屬技能包”—— 專門幫你搞定 “數值計算” 這類復雜任務,比如算游戲里的傷害公式、地圖坐標,或是現實里的成績統計、數據圖表。下面用最通俗的話,把 NumPy 的核心用法拆成 “技能介紹” 和 “操作教程”,小白也能輕松看懂。

一、先搞懂:NumPy 到底能幫我們做什么?

Python 自帶的 “計算器”(比如+、-、×、÷,還有math模塊)只能算 “單個數字”,比如算 “1+1=2”“根號 4=2”。但如果遇到 “批量計算”,比如 “100 個學生的成績都加 5 分”“算 30 個坐標點到原點的距離”,自帶計算器就會 “手忙腳亂”—— 要寫很多重復代碼。

NumPy 的核心優勢就是:能批量處理 “數組”(可以理解成 “一堆數字的集合”),還自帶很多高級數學公式,比如三角函數、矩陣運算,不用我們自己寫復雜邏輯,調用現成的 “技能” 就行。

二、NumPy 的核心技能:8 類常用數學函數

你不用死記硬背,先知道 “遇到什么問題,該用哪個技能”,用到時查一下就行。下面按 “使用場景” 分類,每個技能配 “大白話解釋” 和簡單例子。

1. 三角函數(解決 “角度 / 弧度” 相關問題)

比如游戲里角色旋轉角度換算、物理引擎里的拋物線計算,都會用到角度和弧度的轉換,或是正弦、余弦值。

函數大白話作用簡單例子(先導入 NumPy:import numpy as np
np.sin(x)算 x 的正弦值(x 是弧度)np.sin(np.pi/2)?→ 結果是 1.0(90 度的正弦值)
np.cos(x)算 x 的余弦值(x 是弧度)np.cos(np.pi)?→ 結果是 - 1.0(180 度的余弦值)
np.rad2deg(x)把弧度轉成角度(常用!)np.rad2deg(np.pi)?→ 結果是 180.0(π 弧度 = 180 度)
np.deg2rad(x)把角度轉成弧度(常用!)np.deg2rad(90)?→ 結果是 π/2(90 度 =π/2 弧度)
np.hypot(x1,x2)直角三角形求斜邊(x1、x2 是直角邊)np.hypot(3,4)?→ 結果是 5.0(3、4、5 直角三角形)

2. 雙曲函數(偏數學,但偶爾會用)

和三角函數類似,但針對 “雙曲曲線”(比如電場、磁場里的曲線計算),日常用得少,知道有這些功能就行:np.sinh(x)(雙曲正弦)、np.cosh(x)(雙曲余弦)、np.tanh(x)(雙曲正切)。

3. 數值修約(“四舍五入” 進階版)

比如統計成績時,“把 60.3 分保留 1 位小數”“把 59.8 分湊整成 60 分”,這些 “調整數字位數” 的操作,叫 “數值修約”。

函數大白話作用例子(假設a = [1.23, 2.56, -3.78]
np.around(a)四舍五入到整數np.around(a)?→ [1. 3. -4.]
np.floor(a)向下取整(“地板”,取比它小的最大整數)np.floor(a)?→ [1. 2. -4.]
np.ceil(a)向上取整(“天花板”,取比它大的最小整數)np.ceil(a)?→ [2. 3. -3.]
np.fix(a)向 0 取整(正數往下、負數往上)np.fix(a)?→ [1. 2. -3.]

4. 求和、求積、差分(批量算 “總和”“乘積”“差值”)

比如 “算 10 個學生的總分”“算 5 個數據的乘積”“算每天溫度的變化量”,用這些函數一步到位。

函數大白話作用例子(假設a = [1,2,3,4,5]
np.sum(a)算數組所有元素的總和np.sum(a)?→ 15(1+2+3+4+5)
np.prod(a)算數組所有元素的乘積np.prod(a)?→ 120(1×2×3×4×5)
np.cumsum(a)算 “累積和”(逐個加,存中間結果)np.cumsum(a)?→ [1,3,6,10,15]
np.diff(a)算 “相鄰元素的差值”(后一個減前一個)np.diff(a)?→ [1,1,1,1](2-1,3-2 等)

5. 指數和對數(復雜數學計算)

比如 “算 2 的 10 次方”“算自然對數(ln)”,這些在概率統計、機器學習里常用。

函數大白話作用例子
np.exp(x)算 e 的 x 次方(e 是數學常數,約 2.718)np.exp(1)?→ 2.718...
np.log(x)算自然對數(ln x)np.log(np.e)?→ 1.0
np.log10(x)算常用對數(log?? x,比如算 pH 值)np.log10(100)?→ 2.0
np.log2(x)算二進制對數(log? x,比如算文件大小)np.log2(8)?→ 3.0

6. 算術運算(數組版 “加減乘除”)

Python 自帶的+、-只能算單個數字,NumPy 的這些函數能直接算 “兩個數組對應位置的加減乘除”,不用寫循環。

函數大白話作用例子(a1 = [1,2,3]a2 = [4,5,6]
np.add(a1,a2)兩個數組對應元素相加[1+4, 2+5, 3+6]?→ [5,7,9]
np.multiply(a1,a2)兩個數組對應元素相乘[1×4, 2×5, 3×6]?→ [4,10,18]
np.divide(a1,a2)兩個數組對應元素相除(a1÷a2)[1/4, 2/5, 3/6]?→ [0.25,0.4,0.5]
np.power(a1,a2)算 a1 的 a2 次方(對應元素)[1?, 2?, 3?]?→ [1,32,729]

7. 矩陣和向量積(線性代數核心)

比如游戲里的 3D 建模、圖形旋轉,或是數據分析里的 “矩陣運算”,用這些函數不用手動算矩陣乘法(超容易錯)。

最常用的是np.matmul(a,b)(矩陣乘法),比如:

# 定義一個2行3列的矩陣a,一個3行2列的矩陣b
a = np.matrix([[1,2,3], [4,5,6]])  # 2行3列
b = np.matrix([[2,2], [3,3], [4,4]])  # 3行2列
np.matmul(a, b)  # 結果是2行2列的矩陣:[[20,20],[47,47]]

8. 其他常用數學函數(零散但實用)

函數大白話作用例子
np.sqrt(x)算平方根(√x)np.sqrt(16)?→ 4.0
np.square(x)算平方(x2)np.square(3)?→ 9.0
np.absolute(x)算絕對值(不管正負,取正數)np.absolute(-5)?→ 5.0
np.maximum(a1,a2)兩個數組對應元素取最大值a1=[1,3,5]a2=[2,2,6]?→ [2,3,6]
np.minimum(a1,a2)兩個數組對應元素取最小值同上 → [1,2,5]

三、NumPy 的 “數組操作”:索引和切片

數組是 NumPy 的 “核心道具”(叫Ndarray),比如 “1 行 10 列的數組”(1 維)、“4 行 5 列的數組”(2 維,像 Excel 表格)、“3 層 4 行 5 列的數組”(3 維,像疊起來的 Excel 表格)。

要從數組里 “拿數據”,就需要 “索引”(按位置取單個值)和 “切片”(按范圍取多個值),規則和 Python 的列表(list)很像,但更靈活。

1. 先搞懂 “維度” 和 “索引規則”

數組的 “維度” 就是 “有幾個方向”:

  • 1 維數組:像一條直線,只有 “左右” 方向,索引只有 1 個(比如a[0])。
  • 2 維數組:像一張表格,有 “行” 和 “列” 方向,索引有 2 個(比如a[行索引, 列索引])。
  • 3 維數組:像一疊表格,有 “層”“行”“列” 方向,索引有 3 個(比如a[層索引, 行索引, 列索引])。

重要提醒:所有索引都是從 “0” 開始的!比如 “第 1 行” 對應索引0,“第 2 列” 對應索引1

2. 1 維數組:索引和切片(最簡單)

a = np.arange(10)  # 生成1維數組:[0,1,2,3,4,5,6,7,8,9]
# 1. 索引:取單個值
a[1]  # 取索引1的值 → 1(對應“第2個元素”)
a[[1,2,3]]  # 取多個索引的值 → [1,2,3]# 2. 切片:按范圍取(語法:start:stop:step,即“起始:結束:步長”)
a[:5]  # 從開頭取到索引4(不包含5)→ [0,1,2,3,4]
a[5:10]  # 從索引5取到9 → [5,6,7,8,9]
a[0:10:2]  # 步長2,隔一個取一個 → [0,2,4,6,8]

3. 2 維數組:索引和切片(像 Excel 表格)

# 生成2維數組:4行5列(4個行,每個行有5個元素)
a = np.arange(20).reshape(4, 5)  # 結果:
# [[ 0  1  2  3  4]
#  [ 5  6  7  8  9]
#  [10 11 12 13 14]
#  [15 16 17 18 19]]# 1. 索引:取單個值(行索引, 列索引)
a[1, 2]  # 第2行(索引1)、第3列(索引2)→ 7# 2. 切片:按范圍取(行范圍, 列范圍)
a[0:3, 2:4]  # 行取0-2(前3行),列取2-3(第3-4列)→ 
# [[ 2  3]
#  [ 7  8]
#  [12 13]]a[:, ::2]  # 行取所有(:代表所有),列步長2 → 
# [[ 0  2  4]
#  [ 5  7  9]
#  [10 12 14]
#  [15 17 19]]

4. 3 維數組:索引和切片(像疊起來的 Excel)

# 生成3維數組:2層、5行、3列(2個表格,每個表格5行3列)
a = np.arange(30).reshape(2, 5, 3)  # 結構:
# 第0層:
# [[ 0  1  2]
#  [ 3  4  5]
#  [ 6  7  8]
#  [ 9 10 11]
#  [12 13 14]]
# 第1層:
# [[15 16 17]
#  [18 19 20]
#  [21 22 23]
#  [24 25 26]
#  [27 28 29]]# 索引:取單個值(層索引, 行索引, 列索引)
a[0, 1, 2]  # 第0層、第2行、第3列 → 5
a[[0,1], [1,2], [1,2]]  # 取兩個值:(0層1行1列)和(1層2行2列) → [4,23]

四、數組的 “排序、搜索、計數”(整理數據常用)

拿到一堆雜亂的數據,比如 “100 個隨機數”,需要 “排序”“找最大值位置”“算有多少個非 0 數”,用這些函數很快。

1. 排序:np.sort()

# 生成4行5列的隨機數數組
a = np.random.rand(20).reshape(4, 5)  # 隨機數在0-1之間
np.sort(a)  # 默認按“最后一個軸”排序(2維數組按“列”排序)
np.sort(a, axis=0)  # 按“行”排序(即每一列從上到下排)

2. 搜索:找 “最大 / 最小 / 非 0” 元素的位置

# 生成20個0-9的隨機整數
a = np.random.randint(0, 10, 20)  # 比如結果:[3,5,0,7,2,5,0,9,1,4]np.argmax(a)  # 找最大值的索引 → 7(因為最大值9在索引7的位置)
np.argmin(a)  # 找最小值的索引 → 2(最小值0在索引2的位置)
np.nonzero(a)  # 找所有非0元素的索引 → (array([0,1,3,4,5,7,8,9]),)

3. 計數:算 “非 0 元素的數量”

np.count_nonzero(a)  # 算數組里非0元素有多少個 → 上面的例子里有8個非0元素

五、總結:小白怎么上手 NumPy?

  1. 先裝 NumPy:打開命令行,輸入pip install numpy(如果沒裝 Python,先裝 Python)。
  2. 每次用前導入:代碼開頭寫import numpy as npnp是大家約定俗成的簡稱,方便打字)。
  3. 先練 “數組操作”:從 1 維數組的索引、切片開始,再試 2 維,熟悉 “索引從 0 開始” 和 “維度分隔用逗號”。
  4. 遇到數學問題查函數:不用死記,比如要 “算總和” 就搜 “NumPy 求和”,要 “四舍五入” 就搜 “NumPy 四舍五入”,用多了自然就熟了

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

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

相關文章

從自動化到智能化:家具廠智能化產線需求與解決方案解析

伴隨著工業4.0浪潮和智能制造技術的成熟,家具行業正逐步從傳統的自動化生產邁向智能化生產。智能化產線的構建不僅可以提升生產效率,還能滿足個性化定制和柔性制造的需求。本文以某家具廠為例,詳細解析智能化產線的核心需求,并提出…

macOS下基于Qt/C++的OpenGL開發環境的搭建

系統配置 MacBook Pro 2015 Intel macOS 12Xcode 14 Qt開發環境搭建 Qt Creator的下載與安裝 在Qt官網的下載頁面上下載,即Download Qt Online Installer for macOS。下載完成就得到一個文件名類似于qt-online-installer-macOS-x64-x.y.z.dmg的安裝包。 下一步 …

當液態玻璃計劃遭遇反叛者:一場 iOS 26 界面的暗戰

引子 在硅谷的地下代碼俱樂部里,流傳著一個關于 “液態玻璃” 的傳說 —— 那是 Apple 秘密研發的界面改造計劃,如同電影《變臉》中那張能改變命運的面具,一旦啟用,所有 App 都將被迫換上流光溢彩的新面孔。 而今天,我…

探究Linux系統的SSL/TLS證書機制

一、SSL/TLS證書的基本概念 1.1 SSL/TLS協議簡介 SSL/TLS是一種加密協議,旨在為網絡通信提供機密性、完整性和身份驗證。它廣泛應用于HTTPS網站、電子郵件服務、VPN以及其他需要安全通信的場景。SSL(安全套接字層)是TLS(傳輸層安全…

python和java爬蟲優劣對比

Python和Java作為爬蟲開發的兩大主流語言,核心差異源于語法特性、生態工具鏈、性能表現的不同,其優勢與劣勢需結合具體場景(如開發效率、爬取規模、反爬復雜度)判斷。以下從 優勢、劣勢、適用場景 三個維度展開對比,幫…

Unity 槍械紅點瞄準器計算

今天突然別人問我紅點瞄準器在鏡子上如何計算,之前的吃雞項目做過不記得,今天寫個小用例整理下。 主體思想記得是目標位置到眼睛穿過紅點瞄準器獲取當前點的位置就可以。應該是這樣吧,:) 武器測試結構 首先整個結構&am…

題解 洛谷P13778 「o.OI R2」=+#-

文章目錄題解代碼居然沒有題解?我來寫一下我的抽象做法。 題解 手玩一下,隨便畫個他信心的折線圖,如下: 可以發現,如果我們知道終止節點,那么我們就可以知道中間有多少個上升長度。(因為它只能…

RTSP流端口占用詳解:TCP模式與UDP模式的對比

在音視頻傳輸協議中,RTSP(Real-Time Streaming Protocol,實時流傳輸協議)被廣泛用于點播、直播、監控等場景。開發者在實際部署或調試時,常常會遇到一個問題:一路 RTSP 流到底占用多少個端口? 這…

websocket的key和accept分別是多少個字節

WebSocket的Sec-WebSocket-Key是24字節(192位)的Base64編碼字符串,解碼后為16字節(128位)的原始隨機數據;Sec-WebSocket-Accept是28字節(224位)的Base64編碼字符串,解碼后…

單片機開發----一個簡單的Boot

文章目錄一、設計思路**整體框架設計****各文件/模塊功能解析**1. main.c(主程序入口,核心控制)2. 隱含的核心模塊(框架中未展示但必備)**設計亮點**二、代碼bootloader.hbootloader.cflash.cmain.c一、設計思路 整體…

Day2p2 夏暮客的Python之路

day2p2 The Hard Way to learn Python 文章目錄day2p2 The Hard Way to learn Python前言一、提問和提示1.1 關于raw_input()1.2 關于input()二、參數、解包、變量2.1 解讀參數2.2 解讀解包2.3 解讀變量2.4 實例2.5 模塊和功能2.6 練習前言 author:SummerEnd date…

【C++設計模式】第二篇:策略模式(Strategy)--從基本介紹,內部原理、應用場景、使用方法,常見問題和解決方案進行深度解析

C設計模式系列文章目錄 【第一篇】C單例模式–懶漢與餓漢以及線程安全 【C設計模式】第二篇:策略模式(Strategy)--從基本介紹,內部原理、應用場景、使用方法,常見問題和解決方案進行深度解析一、策略模式的基本介紹1.…

四十歲編程:熱愛、沉淀與行業的真相-優雅草卓伊凡

四十歲編程:熱愛、沉淀與行業的真相-優雅草卓伊凡今日卓伊凡收到一個問題:「如何看待40歲還在擼代碼的程序員?」這讓我不禁思考:從何時起,年齡成了程序員職業中的敏感詞?在互聯網的某些角落,彌漫…

pycharm解釋器使用anaconda建立的虛擬環境里面的python,無需系統里面安裝python。

Anaconda建立的虛擬環境可以在虛擬環境里設置任何的python版本,pycharm解釋器使用anaconda建立的虛擬環境里面的python,比如anaconda建立的虛擬環境1、虛擬環境2,pycharm解釋器使用anaconda建立虛擬環境1也可以使用虛擬環境2,根本…

機器學習:后篇

目錄 一、KNN算法-分類 樣本距離 KNN算法原理 缺點 API 二、模型選擇與調優 交叉驗證 保留交叉驗證(HoldOut) k-折交叉驗證(K-fold) 分層k-折交叉驗證(Stratified k-fold) 其他交叉驗證 三、樸素貝葉斯-分類 理論介紹 拉普拉斯平滑系數 API 四、決策樹-分類 理論…

C++17無鎖編程實戰

在多線程編程里,“鎖” 這東西就像把雙刃劍 —— 用好了能保數據安全,用不好就麻煩了:大粒度的鎖把并發度壓得死死的,稍不注意加錯鎖還可能搞出死鎖,程序直接 “僵住”。 但如果能擺脫鎖,搞出支持安全并發…

SVT-AV1 svt_aom_motion_estimation_kernel 函數分析

void *svt_aom_motion_estimation_kernel(void *input_ptr) // 運動估計內核主函數,接收線程輸入參數{// 從輸入參數中獲取線程上下文指針EbThreadContext * thread_ctx (EbThreadContext *)input_ptr;// 從線程上下文中獲取運動估計上下文指針MotionEstimationCon…

關于NET Core jwt Bearer Token 驗證的大坑,浪費3個小時,給各位兄弟搭個橋。

net core 使用jwt Bearer Token 認證獲取接口訪問權限,前期一陣操作沒任何問題,等認證接口寫的好了,通過PostMan測試的時候,總是報一個 IDX14102: Unable to decode the header eyJhbGciOiJIUzI1NiIsInR5cCI6 ,錯誤&a…

系統架構設計師備考第14天——業務處理系統(TPS)

一、TPS的核心概念與定位 1. 定義與演進 定義:TPS(Transaction Processing System)又稱電子數據處理系統(EDPS),是處理企業日常事務的信息系統,如財務、庫存、銷售等局部業務管理。歷史地位&…

目標檢測系列-Yolov5下載及運行

由于項目需要,最近一直在看目標檢測相關的資料,不過紙上得來終覺淺,絕知此事要躬行啊。從今日起,將學習的過程記錄一下,作為以后用來復習的材料吧。 我想最快的學習便是直接動手做項目,因此今天就將yolov5模…