
numpy.einsum
是NumPy庫提供的一個強大的函數(shù),它可以對多維數(shù)組進行高效的計算和操作。einsum
函數(shù)的全稱為“Einstein Summation”,它的主要功能是對多個數(shù)組進行運算并且輸出結果。在這篇文章中,我們將通過介紹einsum
函數(shù)的使用方式和示例來幫助你更好地理解和運用它。
einsum
函數(shù)的基本語法如下:
numpy.einsum(subscripts, *operands, out=None, dtype=None, order='K', casting='safe',
optimize=False)
其中,subscripts
參數(shù)是一個字符串,用于指定計算的方式和輸出結果的格式;operands
參數(shù)則是一個或多個需要參與計算的數(shù)組。其他參數(shù)包括:
out
:指定輸出結果存儲的位置;dtype
:指定輸出結果的數(shù)據(jù)類型;order
:指定輸入數(shù)組的存儲順序;casting
:指定數(shù)據(jù)類型轉換的方式;optimize
:是否啟用優(yōu)化選項。subscripts
參數(shù)是einsum
函數(shù)最重要的參數(shù)之一,它用于指定計算方式和輸出結果的格式。在subscripts
參數(shù)中,每個字母都代表一個維度,而逗號則表示不同的數(shù)組之間。例如,對于兩個形狀分別為(3, 4)
和(4, 5)
的二維數(shù)組A和B,我們可以使用以下方式來計算它們的矩陣乘積:
import numpy as np
A = np.random.rand(3, 4)
B = np.random.rand(4, 5)
C = np.einsum('ij,jk->ik', A, B)
print(C)
在這個例子中,'ij,jk->ik'
就是subscripts
參數(shù),它表示了矩陣乘法的計算方式。具體來說,'ij'
表示第一個數(shù)組(即A)的前兩個維度,'jk'
表示第二個數(shù)組(即B)的后兩個維度,而'->ik'
則表示輸出結果的維度應該是前兩個維度與后兩個維度的交叉相乘。
除了使用單個字母代表維度之外,我們還可以使用多個字母組合來表示某些軸上的求和。例如,如果我們想要計算一個三維數(shù)組的所有元素之和,可以使用以下代碼:
import numpy as np
A = np.random.rand(3, 4, 5)
s = np.einsum('ijk->', A)
print(s)
在這個例子中,'ijk->'
表示對三維數(shù)組A的所有元素求和。注意,'->'
后面沒有任何字母,這意味著輸出結果不包含任何維度。
einsum
函數(shù)不僅可以用于矩陣乘法,還可以廣泛地應用到各種線性代數(shù)、物理和機器學習問題中。其中一個常見的應用就是計算張量乘積。對于兩個形狀分別為(n1, n2, ..., nk)
和(m1, m2, ..., mk)
的$k$階張量$A$和$B$,它們的乘積$C$的形狀為$(n_1m_1, n_2m_2, ..., n_km_k)$,它的元素由以下公式給出:
$$C_{i_1m_1 + j_1, i_2m_2 + j_2, ..., i_km_k + j_k} = A_{i_1, i_2, ..., i_k}B_{j_1, j_2, ..., j_k}$$
其中$i_
在NumPy中,我們可以使用einsum
函數(shù)來計算張量乘積。以下是一個簡單的示例:
import numpy as np
A = np.random.rand(2, 3, 4)
B = np.random.rand(5, 4, 3)
C = np.einsum('ijk,lji->il', A, B)
print(C.shape) # 輸出 (2, 5)
在這個示例中,我們定義了兩個三維數(shù)組A和B,它們的形狀分別為(2, 3, 4)
和(5, 4, 3)
。然后,我們使用einsum
函數(shù)來計算它們的張量乘積,并將結果存儲在數(shù)組C中。具體來說,我們使用字符串'ijk,lji->il'
來指定計算方式,其中'ijk'
表示第一個數(shù)組(即A)的三個維度,'lji'
表示第二個數(shù)組(即B)的三個維度,而'->il'
則表示輸出結果應該是形狀為(2, 5)
的二維數(shù)組。
除了矩陣乘法和張量乘積之外,einsum
函數(shù)還可以用于各種元素級別的計算。例如,我們可以使用einsum
函數(shù)來計算多個數(shù)組的元素乘積。以下是一個簡單的示例:
import numpy as np
A = np.array([1, 2, 3])
B = np.array([4, 5, 6])
C = np.array([7, 8, 9])
D = np.einsum('i,i,i->', A, B, C)
print(D) # 輸出 104
在這個示例中,我們定義了三個一維數(shù)組A、B和C,并且使用einsum
函數(shù)來計算它們的元素乘積。具體來說,我們使用字符串'i,i,i->'
來指定計算方式,其中每個'i'
都表示對應數(shù)組的元素,而'->'
則表示輸出結果不包含任何維度。輸出結果為標量值104,它是A、B和C三個數(shù)組對應位置元素相乘的總和。
numpy.einsum
函數(shù)是一個強大的工具,它可以用于各種復雜的多維數(shù)組計算和操作。本文介紹了einsum
函數(shù)的語法和參數(shù),以及幾個常見的示例。如果你需要處理多維數(shù)組數(shù)據(jù),或者需要進行一些高級的線性代數(shù)運算,那么einsum
函數(shù)就是一個非常有用的工具。不過,在編寫代碼時,我們建議仔細查看einsum
函數(shù)的文檔,確保正確理解計算方式和輸出結果的格式,以避免出現(xiàn)錯誤。
數(shù)據(jù)分析咨詢請掃描二維碼
若不方便掃碼,搜微信號:CDAshujufenxi
SQL Server 中 CONVERT 函數(shù)的日期轉換:從基礎用法到實戰(zhàn)優(yōu)化 在 SQL Server 的數(shù)據(jù)處理中,日期格式轉換是高頻需求 —— 無論 ...
2025-09-18MySQL 大表拆分與關聯(lián)查詢效率:打破 “拆分必慢” 的認知誤區(qū) 在 MySQL 數(shù)據(jù)庫管理中,“大表” 始終是性能優(yōu)化繞不開的話題。 ...
2025-09-18CDA 數(shù)據(jù)分析師:表結構數(shù)據(jù) “獲取 - 加工 - 使用” 全流程的賦能者 表結構數(shù)據(jù)(如數(shù)據(jù)庫表、Excel 表、CSV 文件)是企業(yè)數(shù)字 ...
2025-09-18DSGE 模型中的 Et:理性預期算子的內涵、作用與應用解析 動態(tài)隨機一般均衡(Dynamic Stochastic General Equilibrium, DSGE)模 ...
2025-09-17Python 提取 TIF 中地名的完整指南 一、先明確:TIF 中的地名有哪兩種存在形式? 在開始提取前,需先判斷 TIF 文件的類型 —— ...
2025-09-17CDA 數(shù)據(jù)分析師:解鎖表結構數(shù)據(jù)特征價值的專業(yè)核心 表結構數(shù)據(jù)(以 “行 - 列” 規(guī)范存儲的結構化數(shù)據(jù),如數(shù)據(jù)庫表、Excel 表、 ...
2025-09-17Excel 導入數(shù)據(jù)含缺失值?詳解 dropna 函數(shù)的功能與實戰(zhàn)應用 在用 Python(如 pandas 庫)處理 Excel 數(shù)據(jù)時,“缺失值” 是高頻 ...
2025-09-16深入解析卡方檢驗與 t 檢驗:差異、適用場景與實踐應用 在數(shù)據(jù)分析與統(tǒng)計學領域,假設檢驗是驗證研究假設、判斷數(shù)據(jù)差異是否 “ ...
2025-09-16CDA 數(shù)據(jù)分析師:掌控表格結構數(shù)據(jù)全功能周期的專業(yè)操盤手 表格結構數(shù)據(jù)(以 “行 - 列” 存儲的結構化數(shù)據(jù),如 Excel 表、數(shù)據(jù) ...
2025-09-16MySQL 執(zhí)行計劃中 rows 數(shù)量的準確性解析:原理、影響因素與優(yōu)化 在 MySQL SQL 調優(yōu)中,EXPLAIN執(zhí)行計劃是核心工具,而其中的row ...
2025-09-15解析 Python 中 Response 對象的 text 與 content:區(qū)別、場景與實踐指南 在 Python 進行 HTTP 網絡請求開發(fā)時(如使用requests ...
2025-09-15CDA 數(shù)據(jù)分析師:激活表格結構數(shù)據(jù)價值的核心操盤手 表格結構數(shù)據(jù)(如 Excel 表格、數(shù)據(jù)庫表)是企業(yè)最基礎、最核心的數(shù)據(jù)形態(tài) ...
2025-09-15Python HTTP 請求工具對比:urllib.request 與 requests 的核心差異與選擇指南 在 Python 處理 HTTP 請求(如接口調用、數(shù)據(jù)爬取 ...
2025-09-12解決 pd.read_csv 讀取長浮點數(shù)據(jù)的科學計數(shù)法問題 為幫助 Python 數(shù)據(jù)從業(yè)者解決pd.read_csv讀取長浮點數(shù)據(jù)時的科學計數(shù)法問題 ...
2025-09-12CDA 數(shù)據(jù)分析師:業(yè)務數(shù)據(jù)分析步驟的落地者與價值優(yōu)化者 業(yè)務數(shù)據(jù)分析是企業(yè)解決日常運營問題、提升執(zhí)行效率的核心手段,其價值 ...
2025-09-12用 SQL 驗證業(yè)務邏輯:從規(guī)則拆解到數(shù)據(jù)把關的實戰(zhàn)指南 在業(yè)務系統(tǒng)落地過程中,“業(yè)務邏輯” 是連接 “需求設計” 與 “用戶體驗 ...
2025-09-11塔吉特百貨孕婦營銷案例:數(shù)據(jù)驅動下的精準零售革命與啟示 在零售行業(yè) “流量紅利見頂” 的當下,精準營銷成為企業(yè)突圍的核心方 ...
2025-09-11CDA 數(shù)據(jù)分析師與戰(zhàn)略 / 業(yè)務數(shù)據(jù)分析:概念辨析與協(xié)同價值 在數(shù)據(jù)驅動決策的體系中,“戰(zhàn)略數(shù)據(jù)分析”“業(yè)務數(shù)據(jù)分析” 是企業(yè) ...
2025-09-11Excel 數(shù)據(jù)聚類分析:從操作實踐到業(yè)務價值挖掘 在數(shù)據(jù)分析場景中,聚類分析作為 “無監(jiān)督分組” 的核心工具,能從雜亂數(shù)據(jù)中挖 ...
2025-09-10統(tǒng)計模型的核心目的:從數(shù)據(jù)解讀到決策支撐的價值導向 統(tǒng)計模型作為數(shù)據(jù)分析的核心工具,并非簡單的 “公式堆砌”,而是圍繞特定 ...
2025-09-10