【NumPy】NumPy線性代數模塊詳解:掌握numpy.linalg的核心功能

🧑 博主簡介:阿里巴巴嵌入式技術專家,深耕嵌入式+人工智能領域,具備多年的嵌入式硬件產品研發管理經驗。

📒 博客介紹:分享嵌入式開發領域的相關知識、經驗、思考和感悟,歡迎關注。提供嵌入式方向的學習指導、簡歷面試輔導、技術架構設計優化、開發外包等服務,有需要可加文末聯系方式聯系。

💬 博主粉絲群介紹:① 群內高中生、本科生、研究生、博士生遍布,可互相學習,交流困惑。② 熱榜top10的常客也在群里,也有數不清的萬粉大佬,可以交流寫作技巧,上榜經驗,漲粉秘籍。③ 群內也有職場精英,大廠大佬,可交流技術、面試、找工作的經驗。④ 進群免費贈送寫作秘籍一份,助你由寫作小白晉升為創作大佬。⑤ 進群贈送CSDN評論防封腳本,送真活躍粉絲,助你提升文章熱度。有興趣的加文末聯系方式,備注自己的CSDN昵稱,拉你進群,互相學習共同進步。

NumPy線性代數模塊詳解:掌握numpy.linalg的核心功能

  • 1. NumPy庫介紹
  • 2. linalg 模塊介紹
    • 常用的 `numpy.linalg` 函數概述:
    • 2.1 函數定義及參數說明
      • linalg.inv
      • linalg.det
      • linalg.eig
      • linalg.solve
      • linalg.norm
  • 3. 示例代碼
    • 3.1 計算矩陣的逆矩陣
    • 3.2 計算矩陣的行列式
    • 3.3 計算矩陣的特征值與特征向量
    • 3.4 解決線性方程組
    • 3.5 計算矩陣或向量的范數
  • 4. 實際應用:主成分分析(PCA)
  • 5. 總結

在這里插入圖片描述

1. NumPy庫介紹

NumPy(Numerical Python)是Python編程語言的一個核心庫,用于大量的科學計算。 NumPy提供了對大型、多維數組和矩陣的支持,并且附帶了大量的數學函數庫來進行這些數組的操作。它是許多高級數據分析和機器學習庫的基礎,比如Pandas、SciPy和Scikit-learn。

NumPy的主要優勢在于其數組對象(ndarray),這種對象比Python列表更為高效,可以存儲同類型的數據元素,并且支持各種復雜的數值運算。對于需要進行大量數值計算和數據處理的應用程序,NumPy是首選工具。

2. linalg 模塊介紹

numpy.linalg 模塊提供了一組用于線性代數的基礎函數。這些函數涵蓋了矩陣分解、矩陣特征值與特征向量、求解線性系統等操作。線性代數是科學計算中一個重要的部分,NumPy通過numpy.linalg模塊為用戶提供高效且功能齊全的線性代數工具。

常用的 numpy.linalg 函數概述:

  • linalg.inv: 計算矩陣的逆矩陣。
  • linalg.det: 計算矩陣的行列式。
  • linalg.eig: 計算矩陣的特征值與特征向量。
  • linalg.solve: 解決線性方程組。
  • linalg.norm: 計算矩陣或向量的范數。

2.1 函數定義及參數說明

linalg.inv

計算逆矩陣。

numpy.linalg.inv(a)

參數:

  • a: 輸入方陣。

返回:

  • out: 輸入矩陣的逆矩陣。

linalg.det

計算矩陣的行列式。

numpy.linalg.det(a)

參數:

  • a: 輸入方陣。

返回:

  • 行列式的值。

linalg.eig

計算矩陣的特征值與特征向量。

numpy.linalg.eig(a)

參數:

  • a: 輸入方陣。

返回:

  • w: 特征值數組。
  • v: 特征向量構成的二維數組。

linalg.solve

解決線性方程組。

numpy.linalg.solve(a, b)

參數:

  • a: 系數矩陣。
  • b: 目標矩陣(或向量)。

返回:

  • 解向量或矩陣。

linalg.norm

計算矩陣或向量的范數。

numpy.linalg.norm(x, ord=None, axis=None, keepdims=False)

參數:

  • x: 輸入數組。
  • ord: 范數類型(默認為2范數)。
  • axis: 計算范數的維度。
  • keepdims: 布爾值,是否保持原數組的維度。

返回:

  • 范數值。

3. 示例代碼

接下來我們通過一些示例代碼來展示numpy.linalg模塊的具體用法。

3.1 計算矩陣的逆矩陣

在這個示例中,我們將展示如何計算一個方陣的逆矩陣。

import numpy as np# 創建一個二維數組表示矩陣
A = np.array([[1, 2],[3, 4]])# 計算矩陣的逆矩陣
A_inv = np.linalg.inv(A)
print("Inverse of A:\n", A_inv)

輸出如下:

Inverse of A:[[-2.   1. ][ 1.5 -0.5]]

3.2 計算矩陣的行列式

行列式是矩陣的重要屬性之一,尤其在求解線性方程和矩陣特征值時起重要作用。

import numpy as np# 創建一個二維數組表示矩陣
A = np.array([[1, 2],[3, 4]])# 計算矩陣的行列式
det_A = np.linalg.det(A)
print("Determinant of A:", det_A)

輸出如下:

Determinant of A: -2.0000000000000004

3.3 計算矩陣的特征值與特征向量

特征值與特征向量在很多領域有應用,如振動分析、圖像處理和物理學。

import numpy as np# 創建一個二維數組表示矩陣
A = np.array([[1, 2],[2, 1]])# 計算矩陣的特征值與特征向量
eigenvalues, eigenvectors = np.linalg.eig(A)
print("Eigenvalues of A:", eigenvalues)
print("Eigenvectors of A:\n", eigenvectors)

輸出如下:

Eigenvalues of A: [ 3. -1.]
Eigenvectors of A:[[ 0.70710678 -0.70710678][ 0.70710678  0.70710678]]

3.4 解決線性方程組

求解形如 (Ax = b) 的線性方程組。

import numpy as np# 創建系數矩陣A和目標向量b
A = np.array([[3, 1],[1, 2]])
b = np.array([9, 8])# 解決線性方程組
x = np.linalg.solve(A, b)
print("Solution x:", x)

輸出如下:

Solution x: [2. 3.]

3.5 計算矩陣或向量的范數

范數是衡量矩陣或向量大小的一種方式。

import numpy as np# 創建一個二維數組表示矩陣
A = np.array([[1, 2],[3, 4]])# 計算矩陣的Frobenius范數
norm_A = np.linalg.norm(A)
print("Frobenius norm of A:", norm_A)# 創建一個一維數組表示向量
v = np.array([1, 2, 3])# 計算向量的2范數(歐幾里得范數)
norm_v = np.linalg.norm(v)
print("2-norm of v:", norm_v)

輸出如下:

Frobenius norm of A: 5.477225575051661
2-norm of v: 3.7416573867739413

4. 實際應用:主成分分析(PCA)

主成分分析(PCA)是數據降維的經典方法。這里我們展示如何使用 numpy.linalg 進行PCA實現。

import numpy as np# 創建一個示例數據集
X = np.array([[2.5, 2.4], [0.5, 0.7], [2.2, 2.9], [1.9, 2.2], [3.1, 3.0], [2.3, 2.7], [2, 1.6], [1, 1.1], [1.5, 1.6], [1.1, 0.9]])# 減去數據的均值
X_mean = X - np.mean(X, axis=0)# 計算協方差矩陣
cov_matrix = np.cov(X_mean, rowvar=False)# 計算協方差矩陣的特征值與特征向量
eigenvalues, eigenvectors = np.linalg.eig(cov_matrix)# 將特征值排序,并獲得相應的特征向量
sorted_index = np.argsort(eigenvalues)[::-1]
sorted_eigenvalues = eigenvalues[sorted_index]
sorted_eigenvectors = eigenvectors[:, sorted_index]# 選擇前兩個主成分
n_components = 2
eigenvector_subset = sorted_eigenvectors[:, 0:n_components]# 將數據投影到主成分空間
X_reduced = np.dot(eigenvector_subset.transpose(), X_mean.transpose()).transpose()print("Reduced data:\n", X_reduced)

輸出如下:

Reduced data:[[ 0.82797019  0.17511531][-1.77758033  0.14285723][ 0.99219749  0.38437499][ 0.27421042  0.13041721][ 1.67580142 -0.20949846][ 0.9129491   0.17528244][ 0.09910944 -0.3498247 ][-1.14457216  0.04641726][-0.43804614  0.01776463][-1.40196572 -0.384375  ]]

5. 總結

NumPy是進行科學計算的強大工具,該庫的numpy.linalg模塊則專門提供了各種線性代數運算的支持。在這篇文章中,我們詳細介紹了numpy.linalg中的一些常用函數,并通過豐富的示例演示了它們的具體應用。

通過這些示例,我們了解到:

  1. numpy.linalg.inv 用于計算矩陣的逆矩陣。
  2. numpy.linalg.det 用于計算矩陣的行列式。
  3. numpy.linalg.eig 用于計算矩陣的特征值與特征向量。
  4. numpy.linalg.solve 用于解決線性方程組。
  5. numpy.linalg.norm 用于計算矩陣或向量的范數。

此外,我們還展示了numpy.linalg在主成分分析(PCA)中的實際應用,展示了如何使用這些線性代數函數來進行數據降維操作。

掌握NumPy中的linalg模塊,不僅能夠有效完成各種線性代數計算,還能在實際的數據處理和分析任務中提供重要支持。如果你對更多的NumPy功能感興趣,建議繼續深入學習和探索。

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

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

相關文章

多年期貨盈利的秘訣就是虧了就跑

不怎么看消息面,尤其期貨,外匯。 正大招主賬戶:歐美4恒指26小恒12 歡迎咨詢代理 詳YJCFPL 堅持學習,吸收別人的經驗,為我所用。 獨立思考,培養良好的生活習慣。 我能活到現在的秘訣就是:虧了就趕…

Hexo最新實戰:(一)Hexo7.0+GitHub Pages博客搭建

前言 很多平臺都能寫博客還有創作激勵,為什么我又要搭一個?為什么這次要選擇用Hexo框架? 對應的原因是流量自由和省錢,第一個,很多平臺能寫但不是都有收益,而且平臺有自身的規則,比如會屏蔽一…

【區塊鏈】外部應用程序與區塊鏈進行交互

一,外部應用程序與區塊鏈進行交互案例目標與流程 1.1案例目標 掌握FISCO BCOS應用環境的搭建 與使用(FISCO BCOSWeBASE)掌握基于Java SpringBoot的應 用程序后端項目搭建與開發。掌握應用程序后端與FISCO BCOS 鏈的交互。掌握應用程序前端…

『大模型筆記』量化 vs 剪枝 vs 蒸餾:為推理優化神經網絡!

量化 vs 剪枝 vs 蒸餾:為推理優化神經網絡! 文章目錄 一. 量化 vs 剪枝 vs 蒸餾:為推理優化神經網絡!1.1. 量化(Quantization)1.2. 剪枝(purning)1.3. 知識蒸餾(Knowledge Distillation,也稱為模型蒸餾)1.4. 工程優化(Engineering Optimizations)1.5. 總結二. 參考…

【旅行商問題的優化】

#include<bits/stdc.h> // 包含標準庫的頭文件using namespace std; // 使用標準命名空間template <class Type> // 模板聲明&#xff0c;Type為類型參數 class Traveling{ // 定義Traveling類friend Type Tsp(int **, int[],int, Type); // 聲明友元函數Tsp publi…

WPF hc:PropertyGrid 嵌套顯示

重點&#xff1a; 編寫Edit特性即可&#xff1a; public class ParameterEditor : PropertyEditorBase{public override FrameworkElement CreateElement(PropertyItem propertyItem){var pg new PropertyGrid();return pg;}public override DependencyProperty GetDependen…

2024/5/22 ARMday7

按鍵控制LED燈亮和滅 do_irq.c #include "key_it.h" //#include "led.h" extern void printf(const char *fmt, ...); unsigned int i 0; void do_irq(void) {//獲取中斷號unsigned int irqno(GICC->IAR & (0x3FF));switch (irqno){case 99://處…

Playwright 元素定位

一、get_by_XXXXX 1. get_by_role&#xff1a;根據元素角色進行定位, 常用的參數有兩個&#xff0c;第一個是角色名稱 role&#xff0c;第二個是元素的文本 name。其他參數的解釋大家可以參考源碼注釋。 # 獲取頁面名稱為確定的按鈕 page.get_bt_role(button, name確定) pl…

cfa三級大神復習經驗分享系列(一)

教材還是Notes? 對于愚鈍如我之流&#xff0c;建議大家三級一定要看教材。Note很精華很濃縮&#xff0c;我覺得看過教材再看note感覺總結的很精辟&#xff0c;但是Note是以考點列的&#xff0c;而教材像小說一樣娓娓道來&#xff0c;有邏輯有情節&#xff0c;如果不follow很難…

Android MIPI屏配置

參考資料&#xff1a;RockChip發布的DRM Display Driver Development Guide手冊&#xff0c;以及網上大量相關博客資料 首先要拿到《屏幕硬件規格書》和《DataSheet》&#xff0c;軟件配置主要依靠DataSheet提供數據支持。 查閱DataSheet里面on sequence和off sequence說明&a…

機器學習之爬山算法(Hill Climbing Algorithm)

爬山算法(Hill Climbing Algorithm)是一種簡單而常見的啟發式搜索算法,通常用于解決優化問題。它的基本思想類似于登山過程中爬升到山頂的過程,即從一個起始點開始,不斷嘗試向鄰近的點移動,直到找到一個局部最優解。 下面是爬山算法的基本工作流程: 初始化:選擇一個初…

關于同一個地址用作兩個不同頁面時,列表操作欄按鈕混淆狀態

同一個地址用作兩個不同頁面時&#xff0c;列表頁的操作欄中有好多個按鈕&#xff0c;如果用了v-if&#xff0c;可能會導致按鈕混淆狀態如disabled等屬性混亂 解決方法1&#xff1a; 將v-if換成v-show&#xff0c;用了v-show之后意味著所有按鈕都在只是在頁面上隱藏了 解決方…

【python深度學習】——torch.min()

【python深度學習】——torch.min 1. torch.min()1.1 計算整個張量的最小值1.2 沿特定維度計算最小值1.3 比較兩個張量 1. torch.min() torch.min()接受的參數如下: input: 輸入的張量。dim: 沿指定維度尋找最小值。如果指定了該參數&#xff0c;返回一個元組&#xff0c;其中…

基于Vue+SpirngBoot的博客管理平臺的設計與實現(論文+源碼)_kaic

摘 要 隨著當下社會的發展&#xff0c;互聯網已經成為時代的主流&#xff0c;從此進入了互聯網時代&#xff0c;對大部分人來說&#xff0c;互聯網在日常生活中的應用是越來越頻繁&#xff0c;大家都在互聯網當中互相交流、學習、娛樂。博客正是扮演這樣一個角色。博客已成為當…

[Nodejs]使用adm-zip和fs-extra壓縮打包后的文件

在此之前&#xff0c;操作目錄、壓縮文件是通過scripts來實現的&#xff0c;在windows機器上多有不便&#xff0c;需要通過linux命令行來實現cp、rm命令&#xff1a; "cpdist": "cp -r ./dist/* ../../qw-portal/assetAllocation/", "rmdist": …

實驗八 單區域OSPF路由協議配置

一、實驗目的 掌握 OSPF 動態路由協議的配置、診斷方法。 二、實驗步驟 1、 運行Cisco Packet Tracer軟件&#xff0c;在邏輯工作區放入三臺路由器、兩臺工作站PC及一臺筆記本&#xff0c;分別點擊各路由器&#xff0c;打開其配置窗口&#xff0c;關閉電源&#xff0c;分別加…

如何選擇云服務器

云服務器選擇概述 在選擇合適的云服務器時&#xff0c;需要綜合考慮多個方面的因素&#xff0c;包括但不限于云服務器的類型、配置、價格、性能、安全性、可靠性、擴展性以及服務商的品牌信譽等。以下是根據搜索結果得出的詳細分析和建議。 云服務器選擇詳解 云服務器類型選…

Python裝飾器的應用

Python 中的裝飾器是一種語法糖&#xff0c;可以在運行時&#xff0c;動態的給函數或類添加功能。裝飾器本質上是一個函數&#xff0c;使用 函數名就是可實現綁定給函數的第二個功能 。它的作用就是在不修改被裝飾對象源代碼和調用方式的前提下為被裝飾對象添加額外的功能。 …

策略模式代碼

import java.util.*; enum TYPE { NORMAL,CASH_DISCOUNT,CASH_RETURN}; interface Cashsuper { public double acceptCash(double money); } class CashNormal implements CashSuper{// 正常收費子類 public double accptCash(double money){ return money; …

微信小程序如何在公共組件中改變某一個頁面的屬性值

需求 公共組件A改變頁面B的屬性isShow的值。 思路 首先目前我不了解可以直接在組件中改變頁面的值的方法&#xff0c;所以我通過監聽的方式在B頁面監聽app.js的某一屬性值的改變從而改變B頁面的值&#xff0c;眾所周知app.js的某一屬性值是很容易就能更改的。 app.js globa…