當開發學習算法時,每每幾個簡單的圖,可讓你更好地理解算法的內容,而且能夠完整地檢查下算法是否正常運行,是否達到了算法的目的。例如在以前的課程中,學瞭如何繪製成本函數J(θ),能夠幫助確認梯度降低算法是否收斂。一般狀況下,繪製數據或學習算法全部輸出,也會啓發如何改進學習算法。幸運的是,Octave有很是簡單的工具用來生成大量不一樣的圖。當用學習算法時,會發現繪製數據、繪製學習算法等,每每是得到想法來改進算法的重要部分。在這節中,將學習一些Octave的工具來繪製和可視化數據。算法
咱們先來快速生成一些數據用來繪圖。咱們設 t = [ 0 : 0.01 : 0.98 ]; ,t是從0到0.98的數列。咱們設 y1 = sin(2*pi*4*t); ,若是想繪製正弦函數,這很容易,咱們只須要輸入ploy(t,y1);並回車,就會出現這個圖。函數
它的橫軸是變量t,縱軸是變量y1(也就是咱們剛剛計算的正弦函數)。工具
讓咱們設 y2 = cos(2*pi*4*t) ,若是輸入plot(t,y2),那麼Ocatve會消除以前的正弦圖而且用下面這個餘弦圖來代替它。學習
縱軸cos(x)從1開始。spa
若是我要同時表示正弦和餘弦曲線。要作的就是,輸入:plot(t, y1),獲得正弦函數。我使用函數hold on,hold on函數的功能是將在舊的圖像之上繪製新的圖像。我如今繪製y2,輸入:plot(t, y2)。我要以不一樣的顏色繪製餘弦函數,因此我在這裏輸入'r'(帶引號的r)繪製餘弦函數,r表示所使用的顏色:plot(t,y2,'r')。3d
再加上命令xlabel('time'),來加上X軸即橫軸的標籤time,輸入ylabel('value'),來加上縱軸的標籤value。orm
同時也能夠來標記兩條函數曲線,用這個命令 legend('sin','cos')就行。將這個圖例放在右上方,表示這兩條曲線表示的內容。最後輸入title('myplot'),在圖像的頂部顯示這幅圖的標題。blog
若是想保存這幅圖像,輸入print -dpng 'myplot.png'。png是一個圖像文件格式,若是你這樣作了,它可讓你保存爲一個文件。咱們還能夠改路徑,如cd 'C:\Users\ang\Desktop': print -dpng 'myplot.png'。Octave也能夠保存爲不少其餘的格式,若是你想試試其餘格式文件,你能夠鍵入help plot。最後,若是你想關掉這個圖像,用命令close會讓這個圖像關掉。開發
Octave也能夠爲圖像標號,輸入figure(1); plot(t, y1);將顯示第一張圖(即正弦函數圖)。it
若是想繪製第二個圖,能夠指定一個不一樣的數字編號,輸入figure(2); plot(t, y2);將顯示第二張圖(即餘弦函數圖)。此時咱們其實有兩個圖,一個繪製了正弦函數圖像,另外一個繪製了餘弦函數圖像。
接下來說一下subplot命令,咱們要使用subplot(1,2,1),它將圖像分爲一個1*2的格子,也就是前兩個參數的意義,而後它使用第一個格子,也就是最後一個參數1的意思。那麼這個圖像就顯示在左邊。
若是輸入plot(t,y1),如今這個圖顯示在第一個格子。
若是輸入subplot(1,2,2),那麼就要使用第二個格子。輸入plot(t,y2);如今y2顯示在右邊,也就是第二個格子。
最後,能夠改變軸的刻度,好比改爲[0.5 1 -1 1],輸入命令:axis([0.5 1 -1 1])也就是設置了右邊圖中x軸和y軸的範圍。具體來講就是將右圖中x軸的範圍調整到0.5至1,y軸的範圍調整到-1到1。
你不須要記住全部這些命令,若是你須要改變座標軸,或者須要知道axis命令,你能夠用Octave中用help命令瞭解細節。
最後,還有幾個命令。
clf命令能夠清除一幅圖像。
讓咱們設置A等於一個5×5的magic方陣:
可使用imagesc(A)命令來可視化矩陣,它將會繪製一個5*5的矩陣。它將矩陣繪製成一個5*5的彩色格圖,不一樣的顏色對應A矩陣中的不一樣值。
具體地說,我還可使用函數colorbar,讓我用一個更復雜的命令 imagesc(A),colorbar,colormap gray。這其實是在同一時間運行三個命令:運行imagesc,而後運行,colorbar,而後運行colormap gray。它生成了一個顏色圖像,一個灰度分佈圖,並在右邊也加入一個顏色條。這個顏色條顯示不一樣深淺的顏色所對應的值。具體來講,A矩陣左上角的元素是17,因此對應的是中等的灰度。它右邊一個元素是24,對應的就是接近白色的灰度。
咱們還能夠繪製一個更大的圖像。輸入imagesc(magic(15)),colorbar,colormap gray,咱們獲得一個15*15的幻方。這將會是一幅15*15的方陣數值的圖。
最後再說一個內容。你看到我所作的是使用逗號鏈接函數調用。若是我輸入a=1,b=2,c=3而後回車,這實際上是將三個命令同時執行,或者說是將三個命令一個接一個執行,它將輸出全部這三個結果。其實這和a=1;b=2;c=3;很像。可是,若是我用分號,它不會輸入任何東西。這裏咱們稱之爲逗號鏈接的命令或逗號鏈接的函數調用。用逗號鏈接是另外一種Octave中更便捷的方式,將多條命令例如imagesc,colorbar,colormap,將這多條命令寫在同一行中。