
- Matlab 教程
- MATLAB - 首頁
- MATLAB - 概述
- MATLAB - 特性
- MATLAB - 環境設定
- MATLAB - 編輯器
- MATLAB - 線上版
- MATLAB - 工作區
- MATLAB - 語法
- MATLAB - 變數
- MATLAB - 命令
- MATLAB - 資料型別
- MATLAB - 運算子
- MATLAB - 日期和時間
- MATLAB - 數字
- MATLAB - 隨機數
- MATLAB - 字串和字元
- MATLAB - 文字格式化
- MATLAB - 時間表
- MATLAB - M 檔案
- MATLAB - 冒號表示法
- MATLAB - 資料匯入
- MATLAB - 資料匯出
- MATLAB - 資料歸一化
- MATLAB - 預定義變數
- MATLAB - 決策
- MATLAB - 決策語句
- MATLAB - if end 語句
- MATLAB - if else 語句
- MATLAB - if…elseif else 語句
- MATLAB - 巢狀 if 語句
- MATLAB - switch 語句
- MATLAB - 巢狀 switch
- MATLAB - 迴圈
- MATLAB - 迴圈
- MATLAB - for 迴圈
- MATLAB - while 迴圈
- MATLAB - 巢狀迴圈
- MATLAB - break 語句
- MATLAB - continue 語句
- MATLAB - end 語句
- MATLAB - 陣列
- MATLAB - 陣列
- MATLAB - 向量
- MATLAB - 轉置運算子
- MATLAB - 陣列索引
- MATLAB - 多維陣列
- MATLAB - 相容陣列
- MATLAB - 分類陣列
- MATLAB - 元胞陣列
- MATLAB - 矩陣
- MATLAB - 稀疏矩陣
- MATLAB - 表格
- MATLAB - 結構體
- MATLAB - 陣列乘法
- MATLAB - 陣列除法
- MATLAB - 陣列函式
- MATLAB - 函式
- MATLAB - 函式
- MATLAB - 函式引數
- MATLAB - 匿名函式
- MATLAB - 巢狀函式
- MATLAB - 返回語句
- MATLAB - 空函式
- MATLAB - 區域性函式
- MATLAB - 全域性變數
- MATLAB - 函式控制代碼
- MATLAB - 濾波器函式
- MATLAB - 階乘
- MATLAB - 私有函式
- MATLAB - 子函式
- MATLAB - 遞迴函式
- MATLAB - 函式優先順序順序
- MATLAB - map 函式
- MATLAB - mean 函式
- MATLAB - end 函式
- MATLAB - 錯誤處理
- MATLAB - 錯誤處理
- MATLAB - try...catch 語句
- MATLAB - 除錯
- MATLAB - 繪圖
- MATLAB - 繪圖
- MATLAB - 繪製陣列
- MATLAB - 繪製向量
- MATLAB - 條形圖
- MATLAB - 直方圖
- MATLAB - 圖形
- MATLAB - 二維線圖
- MATLAB - 三維圖
- MATLAB - 圖表格式化
- MATLAB - 對數座標軸圖
- MATLAB - 繪製誤差條
- MATLAB - 繪製三維等高線圖
- MATLAB - 極座標圖
- MATLAB - 散點圖
- MATLAB - 繪製表示式或函式
- MATLAB - 繪製矩形
- MATLAB - 繪製頻譜圖
- MATLAB - 繪製網格曲面
- MATLAB - 繪製正弦波
- MATLAB - 插值
- MATLAB - 插值
- MATLAB - 線性插值
- MATLAB - 二維陣列插值
- MATLAB - 三維陣列插值
- MATLAB - 多項式
- MATLAB - 多項式
- MATLAB - 多項式加法
- MATLAB - 多項式乘法
- MATLAB - 多項式除法
- MATLAB - 多項式的導數
- MATLAB - 變換
- MATLAB - 變換
- MATLAB - 拉普拉斯變換
- MATLAB - 拉普拉斯濾波器
- MATLAB - 高斯-拉普拉斯濾波器
- MATLAB - 逆傅立葉變換
- MATLAB - 傅立葉變換
- MATLAB - 快速傅立葉變換
- MATLAB - 二維逆餘弦變換
- MATLAB - 向座標軸新增圖例
- MATLAB - 面向物件
- MATLAB - 面向物件程式設計
- MATLAB - 類和物件
- MATLAB - 函式過載
- MATLAB - 運算子過載
- MATLAB - 使用者自定義類
- MATLAB - 複製物件
- MATLAB - 代數
- MATLAB - 線性代數
- MATLAB - 高斯消元法
- MATLAB - 高斯-約旦消元法
- MATLAB - 簡化行階梯形
- MATLAB - 特徵值和特徵向量
- MATLAB - 積分
- MATLAB - 積分
- MATLAB - 二重積分
- MATLAB - 梯形法則
- MATLAB - 辛普森法則
- MATLAB - 其他
- MATLAB - 微積分
- MATLAB - 微分
- MATLAB - 矩陣的逆
- MATLAB - GNU Octave
- MATLAB - Simulink
- MATLAB - 有用資源
- MATLAB - 快速指南
- MATLAB - 有用資源
- MATLAB - 討論
MATLAB - 多維陣列
在 MATLAB 中,多維陣列是指具有超過兩個維度的陣列。到目前為止,我們已經接觸過用行和列表示的二維陣列。因此,要訪問任何元素,您需要指定行索引和列索引。對於多維陣列,它是二維陣列的擴充套件。
多維陣列是 MATLAB 中的一個重要概念,它們用於在多個維度(例如矩陣和更高維陣列)中儲存資料。它們對於涉及數值計算、資料分析和影像處理的任務至關重要。
多維陣列的優點
以下列出了我認為多維陣列的一些優點和缺點。
- MATLAB 專為數值計算和資料分析而設計,因此可以輕鬆建立、操作和執行多維陣列上的計算。
- MATLAB 的底層架構針對陣列操作進行了最佳化,從而可以高效地處理大型資料集和複雜的計算。
- 新手可以輕鬆熟悉 MATLAB 中的多維陣列概念,並在他們的工作中使用它。
- MATLAB 強大的視覺化功能使您可以使用各種型別的圖、圖表和影像來繪製、視覺化和分析多維資料。
多維陣列的缺點
- 多維陣列可能會使用大量的記憶體,特別是對於大型資料集而言。處理大型陣列可能會導致系統記憶體限制。
- 成本效益和效能可能會稍微慢一些。
建立多維陣列
要建立一個多維陣列,首先讓我們建立一個二維陣列,然後將其擴充套件為多維陣列。
讓我們建立一個如下所示的 3x3 二維陣列:
A = [1 2 3; 4 5 6; 7 8 9]
命令視窗的輸出如下:
>> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >>
現在要新增第三維,您可以這樣做:
A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
因此 A(:,:, 1) 包含 [1 2 3; 4 5 6; 7 8 9],而 A(:,:,2) 包含 [10 11 12; 13 14 15; 16 17 18]
讓我們看看 MATLAB 命令視窗中的執行結果:
>> A = [1 2 3; 4 5 6; 7 8 9] A = 1 2 3 4 5 6 7 8 9 >> A(:,:,2) = [10 11 12; 13 14 15; 16 17 18] A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18 >> A(:,:, 1) ans = 1 2 3 4 5 6 7 8 9 >> A(:,:,2) ans = 10 11 12 13 14 15 16 17 18 >>
讓我們將第 3 頁和第 4 頁新增到多維陣列 A 中。
A(:,:,3) = 0 A(:,:,4) = 1
在 MATLAB 命令視窗中執行相同的操作時:
A(:,:,3) = 0 0 0 0 0 0 0 0 0 A(:,:,4) = 1 1 1 1 1 1 1 1 1
因此,當您在 MATLAB 命令視窗中檢查矩陣 A 時,您將得到以下結果:
>> A A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18 A(:,:,3) = 0 0 0 0 0 0 0 0 0 A(:,:,4) = 1 1 1 1 1 1 1 1 1 >>
訪問多維陣列的元素
要從多維陣列中訪問元素,請對您要訪問的行、列和頁使用整數下標。
例如,在二維陣列(矩陣)中,您將使用兩個下標:一個用於行索引,一個用於列索引。在三維陣列中,您將使用三個下標:一個用於行索引,一個用於列索引,一個用於“頁”或深度索引。
考慮到每頁的值如下所示,我們將從多維陣列 A 中訪問元素。
A(:,:,1) = [1 2 3; 4 5 6; 7 8 9] A(:,:,2) = [10 11 12; 13 14 15; 16 17 18]
在 MATLAB 命令視窗中執行後,陣列 A 如下所示:
>> A(:,:,1) = [1 2 3; 4 5 6; 7 8 9] A(:,:,2) = [10 11 12; 13 14 15; 16 17 18] A(:,:,1) = 1 2 3 4 5 6 7 8 9 A(:,:,2) = 10 11 12 13 14 15 16 17 18
從上面的第 2 頁,我想訪問值:12。
為此,我們可以使用以下細節來訪問它
A(1, 3, 2)
這裡 1 是值 12 所在的行,3 是它所在的列,2 是頁或深度。
在 MATLAB 命令視窗中執行相同的操作時:
>> A(1, 3, 2) ans = 12 >>
前面我們只訪問了一個值,要訪問一系列值,可以按如下方式進行:
在第二維中使用索引向量 [1 2] 來訪問 A 的每一頁的第一列和第二列。
C = A(:,[1 2],:)
執行相同的操作後,MATLAB 命令視窗中的輸出為:
C(:,:,1) = 1 2 4 5 7 8 C(:,:,2) = 10 11 13 14 16 17
現在,如果您想獲取每一頁的第二行和第三行,您可以這樣做:
D = A(2:3,:,:)
執行相同的操作後,MATLAB 命令視窗中的輸出為:
>> D = A(2:3,:,:) D(:,:,1) = 4 5 6 7 8 9 D(:,:,2) = 13 14 15 16 17 18
操作多維陣列
在多維陣列中,可以像對向量和矩陣一樣,以多種方式重新排列元素。reshape、permute 和 squeeze 函式被證明是調整這些元素排列的有價值工具。
讓我們看看在兩頁多維陣列 A 上使用 reshape()、permute() 和 squeeze() 的示例。
A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2] A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3]
在 MATLAB 命令視窗中執行上述操作後,輸出為:
>> A = [1 2 3 4 5; 9 0 6 3 7; 8 1 5 0 2] A(:,:,2) = [9 7 8 5 2; 3 5 8 5 1; 6 9 4 3 3] A = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 A(:,:,1) = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 A(:,:,2) = 9 7 8 5 2 3 5 8 5 1 6 9 4 3 3 >>
reshape()
讓我們嘗試在 A 上使用 reshape() 方法。
reshaped_A = reshape(A, [], size(A, 3))
在這裡,您使用 reshape 函式將三維陣列 A 轉換為二維矩陣 reshaped_A。函式 reshape(A, [], size(A, 3)) 將 A 的元素重新排列成一個矩陣,其中行數根據 A 中的頁數自動確定。
在 MATLAB 命令視窗中執行相同的操作後,您將得到:
>> reshaped_A = reshape(A, [], size(A, 3)) reshaped_A = 1 9 9 3 8 6 2 7 0 5 1 9 3 8 6 8 5 4 4 5 3 5 0 3 5 2 7 1 2 3 >>
permute()
permuted_A = permute(A, [3, 1, 2])
permute 函式重新排序原始三維陣列 A 的維度。透過將 [3, 1, 2] 指定為排列順序,您已將“頁”維度移到前面,從而更改了陣列中元素的排列。
在 MATLAB 命令視窗中執行後,輸出為:
>> permuted_A = permute(A, [3, 1, 2]) permuted_A(:,:,1) = 1 9 8 9 3 6 permuted_A(:,:,2) = 2 0 1 7 5 9 permuted_A(:,:,3) = 3 6 5 8 8 4 permuted_A(:,:,4) = 4 3 0 5 5 3 permuted_A(:,:,5) = 5 7 2 2 1 3 >>
squeeze()
squeezed_A = squeeze(A)
squeeze 函式可用於從給定的三維陣列 A 中移除單例維度,從而產生三維陣列 squeezed_A。
在 MATLAB 命令視窗中執行後,輸出為:
>> squeezed_A = squeeze(A) squeezed_A(:,:,1) = 1 2 3 4 5 9 0 6 3 7 8 1 5 0 2 squeezed_A(:,:,2) = 9 7 8 5 2 3 5 8 5 1 6 9 4 3 3 >>