HOWTO · MATLAB
在 MATLAB 中建立一個空矩陣
本教程演示了在 MATLAB 中使用不同方法建立空矩陣的方法。
本頁內容
這個與 Octave 相容的範例可用來了解 MATLAB 如何處理維度。它會建立一個有三欄、沒有列的矩陣,接著查詢其維度。程式碼是為設定的執行環境提供的範例;本文不宣稱曾在 MATLAB 或 Octave 中執行並取得結果。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
M = ones(0, 3);
disp(size(M));
建立 0×0 空矩陣
只要矩陣至少有一個維度的長度為零,它就是空矩陣。最簡單的 MATLAB 寫法是 [],其大小為 0-by-0。它既沒有列也沒有欄,因此不含任何元素。這種形狀適合作為初始值,之後可由其他操作指派資料或串接資料。
第一個範例使用 ones(0, 3) 指定零列與三欄。列的維度為零,代表矩陣沒有元素,即使另一個維度為三也是如此。MATLAB 支援長度為零的維度;由於沒有可存放數值的位置,這個矩陣並不含三個 1。
建立具有指定維度的空矩陣
若需要其中一個維度長度為零的特定形狀,可使用 ones(m,n) 或 zeros(m,n) 之類的建構函式。例如,ones(0,3) 表示 0-by-3 矩陣,而 zeros(4,0) 表示 4-by-0 矩陣。這兩種情況都有一個維度為零,因此結果不含任何元素。逐步建立結果,或函式需要固定欄數時,這些形式都很實用。
引數的順序會決定矩陣的形狀:ones(0,3) 有零列、三欄,而 ones(3,0) 有三列、零欄。除非打算在矩陣中配置元素位置,否則不要把零維度改成正數。這裡的建構方式採用 MATLAB 語法;本文未宣稱任何執行結果。
區分空矩陣與全零矩陣
zeros(3,5) 會建立一個 3-by-5 矩陣,其中有十五個元素,且每個元素的值都是零。它不是空矩陣:兩個維度都是正數,矩陣中的元素也可以讀取或指派。相較之下,zeros(3,0) 的第二個維度長度為零,因此不含任何元素。由此可見,這些例子中的「零」代表兩種不同的意思:元素值為 0,或維度長度為 0。
若需要以零初始化且含有元素的陣列,例如用來累積數值的工作區,請使用維度為正數的 zeros(m,n)。若所需的形狀本身不含元素,則使用零長度維度。這也能避免把全零影像或陣列稱為空矩陣:即使其中每個值都是 0,這些物件仍配置了元素。
檢查矩陣的大小與是否為空
使用 size(A) 查看矩陣的維度,並使用 isempty(A) 判斷矩陣是否不含任何元素。例如,size(ones(0,3)) 會提供 0-by-3 矩陣的形狀資訊,而 isempty(ones(0,3)) 則會檢查它是否含有元素。全零的 3-by-5 矩陣大小為正值,因此不是空矩陣,即使 all(zeros(3,5) == 0) 的結果為 true。檢查元素值與檢查是否為空,回答的是不同問題。
以下是說明兩者差異的完整檢查範例。本文中的範例尚未執行,因此不宣稱任何輸出。
本節中的程式碼以及顯示的標籤或輸出仍為英文。
A = ones(0, 3);
Z = zeros(3, 5);
disp(size(A));
disp(isempty(A));
disp(size(Z));
disp(isempty(Z));
遇到形狀不符的問題時,請檢查 size(A),不要根據元素值推測維度。矩陣即使只含零,仍可能有許多元素;維度長度為零時,元素總數才會是零。在後續計算前,這些檢查有助於確認建構函式產生了預期的形狀。