5.3 計算數(shù)據(jù)
參考視頻: 5 - 3 - Computing on Data (13 min).mkv
現(xiàn)在,你已經(jīng)學(xué)會了在 Octave 中如何加載或存儲數(shù)據(jù),如何把數(shù)據(jù)存入矩陣等等。在這段視頻中,我將介紹如何對數(shù)據(jù)進(jìn)行運算,稍后我們將使用這些運算操作來實現(xiàn)我們的學(xué)習(xí)算法。
這是我的 Octave 窗口,我現(xiàn)在快速地初始化一些變量。比如設(shè)置 A 為一個 3×2 的矩陣,設(shè)置 B 為一個 3 × 2 矩陣,設(shè)置 C 為 2 × 2 矩陣。
我想算兩個矩陣的乘積,比如說 A × C,我只需鍵入 A×C,這是一個 3×2 矩陣乘以2×2 矩陣,得到這樣一個 3×2 矩陣。
你也可以對每一個元素,做運算 方法是做點乘運算 A .*B,這么做 Octave 將矩陣 A 中的每一個元素與矩陣 B 中的對應(yīng)元素相乘A .* B
這里第一個元素 1 乘以 11 得到 11,第二個元素 2 乘以 12 得到 24,這就是兩個矩陣的元素位運算。通常來說,在 Octave 中點號一般用來表示元素位運算。
這里是一個矩陣 A,這里我輸入 A .^ 2,這將對矩陣 A 中每一個元素平方。
我們設(shè) V 是一個向量,設(shè)V 為 [1; 2; 3] 是列向量,你也可以輸入 1 ./ V,得到每一個元素的倒數(shù),所以這樣一來,就會分別算出 1/1 1/2 1/3。
矩陣也可以這樣操作,1 ./ A 得到 A 中每一個元素的倒數(shù)。同樣地,這里的點號還是表示對每一個元素進(jìn)行操作。
我們還可以進(jìn)行求對數(shù)運算,也就是對每個元素進(jìn)行求對數(shù)運算。
還有自然數(shù) e 的冪次運算,就是以e 為底,以這些元素為冪的運算。
我還可以用 abs 來對 v 的每一個元素求絕對值,當(dāng)然這里 v 都是正數(shù)。我們換成另一個這樣對每個元素求絕對值,得到的結(jié)果就是這些非負(fù)的元素。還有 –v,給出 V 中每個元素的相反數(shù),這等價于 -1 乘以 v,一般就直接用 -v 就好了,其實就等于 -1*v。
還有一個技巧,比如說 我們想對 v 中的每個元素都加 1,那么我們可以這么做,首先構(gòu)造一個 3 行 1 列的 1 向量,然后把這個 1 向量跟原來的向量相加,因此 v 向量從[1 2 3]
增至 [2 3 4]。我用了一個,length(v) 命令,因此這樣一來,ones(length(v) ,1) 就相當(dāng)于ones(3,1),然后我做的是 v + ones(3,1),也就是將 v 的各元素都加上這些 1,這樣就將 v 的每個元素增加了 1。
另一種更簡單的方法是直接用 v+1,v + 1 也就等于把 v 中的每一個元素都加上 1。
現(xiàn)在,讓我們來談?wù)劯嗟牟僮鳌?/p>
矩陣 A 如果你想要求它的轉(zhuǎn)置,那么方法是用 A’,將得出 A 的轉(zhuǎn)置矩陣。當(dāng)然,如果我寫 (A’)’,也就是 A 轉(zhuǎn)置兩次,那么我又重新得到矩陣 A。
還有一些有用的函數(shù),比如: a=[1 15 2 0.5],這是一個 1 行 4 列矩陣, val=max(a),這將返回 A 矩陣中的最大值 15。
我還可以寫 [val, ind] = max(a),這將返回 a 矩陣中的最大值存入 val,以及該值對應(yīng)的索引,元素 15 對應(yīng)的索引值為 2 存入 ind,所以 ind 等于 2
特別注意一下,如果你用命令 max(A), A 是一個矩陣的話,這樣做就是對每一列求最大值。
我們還是用這個例子,這個 a 矩陣 a=[1 15 2 0.5],如果輸入 a<3,這將進(jìn)行逐元素的運算,所以元素小于 3 的返回 1,否則返回 0。
因此,返回[1 1 0 1]。也就是說,對 a 矩陣的每一個元素與 3 進(jìn)行比較,然后根據(jù)每一
個元素與 3 的大小關(guān)系,返回 1 和 0 表示真與假。
如果我寫 find(a<3),這將告訴我 a 中的哪些元素是小于 3 的。
設(shè) A = magic(3),magic 函數(shù)將返回一個矩陣,稱為魔方陣或幻方 (magic squares),它們具有以下這樣的數(shù)學(xué)性質(zhì):它們所有的行和列和對角線加起來都等于相同的值。
當(dāng)然據(jù)我所知,這在機器學(xué)習(xí)里基本用不上,但我可以用這個方法很方便地生成一個
3 行 3 列的矩陣,而這個魔方矩陣這神奇的方形屏幕。每一行、每一列、每一個對角線三個數(shù)字加起來都是等于同一個數(shù)。
在其他有用的機器學(xué)習(xí)應(yīng)用中,這個矩陣其實沒多大作用。
如果我輸入 [r,c] = find( A>=7 ),這將找出所有A 矩陣中大于等于 7 的元素,因此,r 和c 分別表示行和列,這就表示,第一行第一列的元素大于等于 7,第三行第二列的元素大于等于 7,第二行第三列的元素大于等于 7。
順便說一句,其實我從來都不去刻意記住這個 find 函數(shù),到底是怎么用的,我只需要會用 help 函數(shù)就可以了,每當(dāng)我在使用這個函數(shù),忘記怎么用的時候,我就可以用 help 函數(shù),鍵入 help find 來找到幫助文檔。
最后再講兩個內(nèi)容,一個是求和函數(shù),這是 a 矩陣:
鍵入 sum(a),就把 a 中所有元素加起來了。
如果我想把它們都乘起來,鍵入 prod(a),prod 意思是 product(乘積),它將返回這四個
元素的乘積。
floor(a) 是向下四舍五入,因此對于 a 中的元素 0.5 將被下舍入變成 0。
還有 ceil(a),表示向上四舍五入,所以 0.5 將上舍入變?yōu)樽罱咏恼麛?shù),也就是 1。 鍵入 type(3),這通常得到一個 3×3 的矩陣,如果鍵入 max(rand(3), rand(3)),這樣做的
結(jié)果是返回兩個 3×3 的隨機矩陣,并且逐元素比較取最大值。假如我輸入 max(A,[],1),這樣做會得到每一列的最大值。
所以第一列的最大值就是 8,第二列是 9,第三列的最大值是 7,這里的 1 表示取 A 矩陣第一個維度的最大值。
相對地,如果我鍵入 max(A,[],2),這將得到每一行的最大值,所以,第一行的最大值是等于 8,第二行最大值是 7,第三行是 9。
所以你可以用這個方法來求得每一行或每一列的最值,另外,你要知道,默認(rèn)情況下max(A)返回的是每一列的最大值,如果你想要找出整個矩陣 A 的最大值,你可以輸入max(max(A)),或者你可以將 A 矩陣轉(zhuǎn)成一個向量,然后鍵入 max(A(:)),這樣做就是把 A 當(dāng)做一個向量,并返回 A 向量中的最大值。
最后,讓我們把 A 設(shè)為一個 9 行 9 列的魔方陣,魔方陣具有的特性是每行每列和對角線的求和都是相等的。
這是一個 9×9 的魔方陣,我們來求一個 sum(A,1),這樣就得到每一列的總和, 這也驗證了一個 9×9 的魔方陣確實每一列加起來都相等,都為 369。
現(xiàn)在我們來求每一行的和,鍵入 sum(A,2),這樣就得到了 A 中每一行的和加起來還是
369。
現(xiàn)在我們來算 A 的對角線元素的和。我們現(xiàn)在構(gòu)造一個 9×9 的單位矩陣, 鍵入 eye(9)
設(shè)為 I9
然后我們要用 A 逐點乘以這個單位矩陣,除了對角線元素外,其他元素都會得到 0。鍵入 sum(sum(A.*eye(9))
這實際上是求得了,這個矩陣對角線元素的和確實是 369。你也可以求另一條對角線的和也是是 369。
flipup/flipud 表示向上/向下翻轉(zhuǎn)。
同樣地,如果你想求這個矩陣的逆矩陣,鍵入 pinv(A),通常稱為偽逆矩陣,你就把它看成是矩陣 A 求逆,因此這就是 A 矩陣的逆矩陣。
設(shè) temp = pinv(A),然后再用 temp 乘以 A,這實際上得到的就是單位矩陣,對角線為
1 其他元素為 0。
如何對矩陣中的數(shù)字進(jìn)行各種操作,在運行完某個學(xué)習(xí)算法之后,通常一件最有用的事情是看看你的結(jié)果,或者說讓你的結(jié)果可視化,在接下來的視頻中,我會非常迅速地告訴你, 如何很快地畫圖,如何只用一兩行代碼,你就可以快速地可視化你的數(shù)據(jù),這樣你就能更好地理解你使用的學(xué)習(xí)算法。
1.《如何找出矩陣某一列的最大值》援引自互聯(lián)網(wǎng),旨在傳遞更多網(wǎng)絡(luò)信息知識,僅代表作者本人觀點,與本網(wǎng)站無關(guān),侵刪請聯(lián)系頁腳下方聯(lián)系方式。
2.《如何找出矩陣某一列的最大值》僅供讀者參考,本網(wǎng)站未對該內(nèi)容進(jìn)行證實,對其原創(chuàng)性、真實性、完整性、及時性不作任何保證。
3.文章轉(zhuǎn)載時請保留本站內(nèi)容來源地址,http://f99ss.com/keji/3224207.html