當前位置: 首頁>>代碼示例 >>用法及示例精選 >>正文


Python numpy linalg.multi_dot用法及代碼示例


本文簡要介紹 python 語言中 numpy.linalg.multi_dot 的用法。

用法:

linalg.multi_dot(arrays, *, out=None)

在單個函數調用中計算兩個或多個數組的點積,同時自動選擇最快的評估順序。

multi_dot 鏈接 numpy.dot 並使用矩陣的最佳括號[1] [2]。根據矩陣的形狀,這可以大大加快乘法速度。

如果第一個參數是一維的,則將其視為行向量。如果最後一個參數是一維,則將其視為列向量。其他參數必須是二維的。

multi_dot 視為:

def multi_dot(arrays): return functools.reduce(np.dot, arrays)

參數

arrays 數組 序列

如果第一個參數是一維,則將其視為行向量。如果最後一個參數是一維,則將其視為列向量。其他參數必須是二維的。

out ndarray,可選

輸出參數。這必須具有在未使用時將返回的確切類型。特別是,它必須具有正確的類型,必須是C-contiguous,並且它的 dtype 必須是要返回的 dtype點(a,b).這是一個性能特征。因此,如果不滿足這些條件,則會引發異常,而不是嘗試靈活處理。

返回

output ndarray

返回所提供數組的點積。

注意

矩陣乘法的成本可以使用以下函數計算:

def cost(A, B):
    return A.shape[0] * A.shape[1] * B.shape[1]

假設我們有三個矩陣

兩種不同括號的成本如下:

cost((AB)C) = 10*100*5 + 10*5*50   = 5000 + 2500   = 7500
cost(A(BC)) = 10*100*50 + 100*5*50 = 50000 + 25000 = 75000

參考

1

Cormen,“Introduction to Algorithms”,第 15.2 章,p。 370-378

2

https://en.wikipedia.org/wiki/Matrix_chain_multiplication

例子

multi_dot 允許您編寫:

>>> from numpy.linalg import multi_dot
>>> # Prepare some data
>>> A = np.random.random((10000, 100))
>>> B = np.random.random((100, 1000))
>>> C = np.random.random((1000, 5))
>>> D = np.random.random((5, 333))
>>> # the actual dot multiplication
>>> _ = multi_dot([A, B, C, D])

代替:

>>> _ = np.dot(np.dot(np.dot(A, B), C), D)
>>> # or
>>> _ = A.dot(B).dot(C).dot(D)

相關用法


注:本文由純淨天空篩選整理自numpy.org大神的英文原創作品 numpy.linalg.multi_dot。非經特殊聲明,原始代碼版權歸原作者所有,本譯文未經允許或授權,請勿轉載或複製。