前面我們學習了張量的基本概念,我們知道,乙個標量我們定義為零階張量,乙個向量我們稱為一階張量,矩陣稱為二階張量。。。
為了更加便捷的表示張量,我們用乙個新的方式表示張量:用乙個有 n
nn 個腿的圓形形表示 n
nn 階張量,如下所示:
上圖的第一行我們用乙個圓形直接表示乙個標量,因為標量是零階張量,所以我們不在旁邊加邊。上圖的第二行我們為圓形加了乙個邊,我們稱為一階張量,同時我們可以在邊上寫乙個數表示該維度的大小,因此第二行表示乙個 i
ii 維的一階張量(向量)。同理我們通過在這個圓上不斷的增加邊的個數來表示更高階的張量,邊上的數字可以用來表示每個維度有多少元素。
每個張量結點我們可以用不同的圖形來表示,上面我們都是用圓形表示的結點,同樣我們也可以用方形,三角形等來表示乙個結點,我們可以自己選擇。
下圖我們用藍色的圖形表示乙個二階張量 mij
m_mi
j,用綠色圖形表示乙個二階張量 njk
n_nj
k,二階張量是乙個矩陣,因此我們可以表示乙個矩陣的乘積如下所示,上面兩個矩陣的乘積得到的結果是乙個 i×k
i×ki×
k 的矩陣,我們將值相同的兩個邊合併,將合併後的整體視為乙個張量,它表示乙個 i×k
i×ki×
k 的張量,我們將相乘的過程用求和公式表示為 (mn
為了更加簡潔的表示張量相乘,我們將兩個相乘的結點合併,將他們看成乙個結點,忽略他們之間相乘的細節,如下圖所示,直接乙個結點表示相乘的結果。將具有相同大小邊的張量合併為乙個的過程稱為張量的縮並。
下面我們用幾個例子來更加深入的了解一下張量的縮並。
乙個矩陣和向量的乘積為乙個向量。矩陣和向量我們可以表示為二階張量和一階張量,我們可以用圖表示他們的乘積如下,講得到的結果視為乙個整體,表示乙個一階張量,下面的結果我們可以記為 ci=
ajib
j\pmb_i=a_\pmb_j
ccci=
aji
bbbj
。從表示式我們可以看出,張量的縮並可以表示為相同角標的合併,因為兩個張量都包含角標 j
jj 我們可以通過縮並消去 j
jj 得到乙個新的張量。
兩個或更多的張量通過縮並組合在一起就形成了張量網路,如下
上面我們說了,節點的形狀並不是只能是圓形,我們可以選擇任意的形狀,如下所示,我們可以選擇方形或半圓形。
當我們選擇半圓形做為節點時,我們可以通過他的對稱圖形來表示這個矩陣的轉置,如下所示。
矩陣的跡我們可以表示為只有一條指向自己的邊的結點,如下所示,因為他沒有自由邊,所以他表示乙個數,這和矩陣的跡是吻合的。
前面我們說過,對於任意的矩陣,我們都可以通過奇異值分解,變為三個矩陣相乘,我們也可以用這種圖示的方法表示如下。
我們同樣可以用張量網路來表示 cp 分解,如下所示, cp 分解是將張量分解為幾個秩一張量的和,每個秩一張量可以表示為幾個向量的外積,我們用乙個圓圈圈住表示裡面若干個向量的外積,所以 cp 分解就可以表示如下
張量的縮並有兩種實現方式,分別是通過 numpy 的 tensordot 函式和 einsum 函式,下面是兩種方法的具體**:
import numpy as np
a = np.random.randn(5,
3,2)
#隨機生成 5×3×2 的張量
b = np.random.randn(3,
6,4)
c1 = np.tensordot(a, b,[[
1],[
0]])
#後面兩個表示將 a 的第乙個指標和 b 的第 0 個指標收縮
print
('the shape of c = '
)print
(c1.shape)
a = np.random.randn(5,
3,3)
b = np.random.randn(6,
3,3)
c = np.random.randn(4,
3,3)
t = np.einsum(
'iab,jbc,kca->ijk'
, a, b, c)
#前面引數 iab 表示 a 每個指標的維數,jbc 表示 b 每個指標的維數,kca 表示 c 每個指標的維數,縮並為 ijk 的張量
print
('the shape of the resulting tensor = '
)print
(t.shape)
c 程式設計第四張小結
c 程式設計第四章筆記 1.數學函式 標頭檔案為三角函式 sin cos tan asin acos atan 指數函式 exp x e x log x ln x log10 x lg x pow a,b a b sprt x x的平方根 近似函式 double ceil 向上取整 floor 向下...
Scott使用者的四張表
scott使用者的四張表 select from tab 檢視所有的資料表的名稱,如果現在要想知道每張表的表結構,則可以採用以下的命令完成 desc 表名稱 1 部門表 dept 名稱 型別 描述 deptno number 2 表示部門編號,由兩位數字所組成 dname varchar2 14 部...
三張表連線或四張表連線
2.9 三張表連線或四張表連線 語法 select.from ajoinbon a和b的連線條件 joincon a和c的連線條件 right joindon a和d的連線條件 一張sql中內連線和外連線可以混合,都可以出現 案例 找出每個員工的部門名稱以及工資等級,要求顯示員工名 部門名 薪資 薪...