四 張量表示

2021-10-08 10:02:29 字數 2977 閱讀 8847

前面我們學習了張量的基本概念,我們知道,乙個標量我們定義為零階張量,乙個向量我們稱為一階張量,矩陣稱為二階張量。。。

為了更加便捷的表示張量,我們用乙個新的方式表示張量:用乙個有 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中內連線和外連線可以混合,都可以出現 案例 找出每個員工的部門名稱以及工資等級,要求顯示員工名 部門名 薪資 薪...