在不少高效能計算中,矩陣轉置扮演了乙個使用比較頻繁的角色。因此如果在某個處理過程中,矩陣轉置佔的比重比較大,且演算法沒設計好的話就可能會成為該處理過程的計算瓶頸。這裡我將介紹向量化矩陣轉置的演算法過程。
為了簡單、清晰地介紹如何向量化矩陣轉置,我們這裡使用4x4、以行為主的矩陣作為例子進行講解。我們假設有這麼乙個矩陣:
[ a b c d
e f g h
i j k l
m n o p ]
那麼這個矩陣轉置後的形式應該是:
[ a e i m
b f j n
c g k o
d h l p ]
我們在處理過程中,往往先用四個向量暫存器將每一行的四個元素資料先讀取出來。我們這裡就假設vec1讀取(a, b, c, d)這一向量;vec2讀取(e, f, g, h)這一向量;vec3讀取(i, j, k, l)這一向量;vec4讀取(m, n, o, p)這一向量。然後,我們需要將這四個向量中的資料元素做相應整理,然後再寫回相應的儲存位址中。
我們可以先觀察源矩陣與目的矩陣之間的關係,然後再結合vec1到vec4這四個向量暫存器中的資料元素的排布,可以先發現,目的矩陣的第一行頭兩個元素分別是vec1的第乙個元素和vec2的第乙個元素;目的矩陣第二行的頭兩個元素分別是vec1的第二個元素和vec2的第二個元素。目的矩陣的第
三、第四行的頭兩個元素也可以此類推,這樣我們可以先對vec1與vec2做轉置操作,可得到——vec1 = (a, e, b, f);vec2 = (c, g, d, h)。
而目的矩陣第一行的後兩個元素分別是vec3的第乙個元素與vec4的第乙個元素,我們可以跟上面一樣,以此類推,將vec3與vec4做一次轉置操作,得到——vec3 = (i, m, j, n); vec4 = (k, o, l, p)。這樣,矩陣轉置的第一步就完成了。
我們接下去再看vec1與vec3的關係,可以得出vec1的頭兩個元素與vec3頭兩個元素結合在一起就能直接得到目的矩陣的第一行元素,而後面的也同樣如此。所以我們對vec1與vec3做一次雙元素的轉置操作,可以得到——vec1 = (a, e, i, m); vec3 = (b, f, j, n)。同樣,vec2與vec4也執行一次雙元素的轉置,最終獲得vec2 = (c, g, k, o); vec4 = (d, h, l, p)。最後,我們再依次將vec1、vec3、vec2、vec4向量暫存器寫入相應的儲存位址即大功完成。
矩陣的向量化及內積
定義1.設矩陣a aij rm n,把矩陣 a 的元素按行的順序排列成乙個列向量 ve ca a11,a 12,a1n,a21,a 22,a2n,am 1,am 2,amn t則稱向量ve ca為矩陣 a 按行展開的列向量。定義2.設矩陣a aij rm n,把矩陣 a 的元素按行的順序排列成乙個列...
文字向量化
table of contents概述 word2vec nnlm c wcbow and skip gram doc2vec str2vec 文字表示是自然語言處理中的基礎工作,文字表示的好壞直接影響到整個自然語言處理系統的效能。文字向量化就是將文字表示成一系列能夠表達文字語義的向量,是文字表示的...
文字向量化
文字向量化,就是把文字轉化為向量形式。這裡用兩種方式實現本文向量,一種是tf方式,一種是tf idf方式,且這裡向量的長度就是字典的長度。計算兩個向量余弦相似度import math defcount cos similarity vec 1,vec 2 if len vec 1 len vec 2...