首页
/
每日頭條
/
生活
/
如何創建一個矩陣matlab
如何創建一個矩陣matlab
更新时间:2024-04-28 16:13:59
第二章 矩陣1.6 創建矩陣

1.創建矩陣

2.認識創建方法

基本運算符 []

冒号運算符 :

用逗号或空格分隔同一行的元素

用分号或回車鍵分隔不同的行

創建序列 linspace

3.說明

矩陣是一個二維的數據陣列

Matlab 是一個基于矩陣的計算環境,最基本的的數據結構是矩陣

單個數值也存儲為矩陣,在這種情況下,矩陣的大小為 1 乘 1

再例如'Hello World'這樣的字符元素是 1×11 的矩陣

也支持有兩個以上維度的數據結構,即 n 維數組

4.實例演示

%1_6 [1 2 3] %空格分隔元素 [1,2,3] %逗号分隔元素 [1 2 3 4 5 6] %回車創建不同行 [1 2 3;4 5 6] %分号分隔不同行 1:5 %行向量: 1 至 5 1:4.5 %取整到 4 4:1 %空的行向量(錯誤寫法) 4:-1:1 %4 至 1 行向量(正确寫法) 2.5:0.3:3.2 %按 0.3 增長至邊界值内 linspace(1,5,5) %參數分别為起點、終點和元素個數 linspace(1,5) %不指定元素個數,則默認 100 個元素

1.7 創建矩陣的函數

1.介紹一些創建矩陣的常用函數

2.認識函數

全 0 矩陣 zeros

全 1 矩陣 ones

單位矩陣 eye

對角矩陣 diag

魔方矩陣 magic

随機矩陣 rand

上三角矩陣 triu

下三角矩陣 tril

3.實例演示

%1_7 zeros(1,4) %1 行 4 列全 0 矩陣 zeros(3,4) %3 行 4 列全 0 矩陣 zeros(4) %4 階全 0 矩陣 ones(1,4) %1 行 4 列全 1 矩陣 eye(3) %3 階單位矩陣 eye(2,3) %2 行 3 列單位矩陣 magic(3) %3 階魔方矩陣 magic(30) a=rand(1,4) %1 行 4 列随機矩陣 b=rand(4) %4 階随機矩陣 diag(b) %提取對角線元素 diag(a) %a 為向量,則将 a 元素擴展為 n 階矩陣 triu(b) %提取上三角形元素 tril(b) %提取下三角形元素 tril(b,1) %添加偏移量參數,1 正數往右上 tril(b,2) tril(b,-1) %向左下偏移 1,再取下三角元素

1.8 連接矩陣

1.矩陣的連接

2.認識連接方法

基本連接符[]

水平連接 horzcat

垂直連接 vertcat

平鋪複制 repmat

對角分塊 blkdiag

任意維度連接 cat

3.說明

矩陣連接是通過連接一個或多個矩陣來創建一個新矩陣的過程

與創建類似,逗号或空格實現水平連接,分号實現垂直連接

連接後的矩陣要仍然保持矩形結構才能實現連接

也就是說,水平連接矩陣,每個矩陣必須具有相同的行數

垂直連接時,每個矩陣必須具有相同的列數

4.實例演示

%1_8 a=[1 2;3 4] b=[5 6;7 8] [a,b] %矩陣水平連接 [a;b] %垂直連接 horzcat(a,b) %水平連接函數 vertcat(a,b) %垂直連接函數 repmat(a,1,3) %平鋪複制為 1 行 3 列矩陣 repmat(a,3,3) blkdiag(a,b) %對角分塊重組函數:将矩陣 a 和 b 整體分别視為對角線上元素進行重組 e=[1 2] cat(1,e,e) %任意維度連接:維度、矩陣 e、矩陣 e。1 維按列縱向連接 cat(2,e,e) %2 維:橫向連接 cat(3,e,e) %3 維:頁面方向(三維方向)

1.9 矩陣索引

1.矩陣的索引

2.認識函數

獲取矩陣的行列數 size

3.概念

一個矩陣裡有多個元素,要想訪問或修改其中的元素,使用索引

索引 3 種方式:

①組合索引 A(i,j),也稱下标索引

②線性索引 A(i) ,按列優先的順序依次向下索引

③邏輯索引,在邏輯為真的位置返回矩陣的元素

4.說明

組合索引和線性方式可以互換

訪問多個元素或不連續的元素可以把索引寫成矩陣的形式

邏輯索引的維度必須與矩陣的維度相同

索引超出矩陣範圍的元素會報錯

5.實例演示

%1_9 a=magic(3) %3 階魔方矩陣 a(2,3) %組合索引:索引第 2 行第 3 列元素(2 個參數,用逗号分隔) a(3) %線性索引:列優先索引(1 個參數) size(a) %獲取矩陣行列維度 sub2ind([3,3],2,3) %組合索引轉化為線性索引,三個輸入參數為:矩陣維度、組合索引行位置、組合索引列位置 [row,col]=ind2sub(size(a),8) %線性索引轉化為組合索引 % a(3,4) %超出範圍報錯(初學者常犯錯誤) a(1,:) %冒号:表示任意行或任意列 a(:,1) %任意行的第 1 列 a(:,:) a(1,2:3) %第 1 行,第 2-3 列 a(1,[1 3]) %第 1 行,第 1 列和第 3 列 a(1,end) %end 表示最後一個:第 1 行最後 1 列 a([1 3]) %線性索引:矩陣 a 第 1 個和第 3 個元素 a([1 2;4 5]) %提取第 1、2 和第 4、5 個元素并分别放置在矩陣第 1 行和第 2 行 a(:) %按列優先轉變為單個數字序列,返回一列值 b=[1 2;3 4] c=[true false;true false] %邏輯數組結果用 1/0 表示 b(c) %邏輯索引:邏輯值為真返回對應元素,為假不返回

1.10 矩陣元素修改

1.矩陣元素的修改、添加和删除

2.說明

通過指定矩陣索引修改、添加或删除相應元素

索引超出矩陣範圍的元素會報錯,但可以賦值

删除元素後的矩陣仍然要保持矩形,否則報錯

必要時,對超出矩陣範圍的索引賦值需要預分配内存

3.實例演示

%1_10 a=[1 2 3;4 5 6;7 8 9] a(2,2)=10 a(2)=10 a(3,4)=10 %超出矩陣範圍索引會報錯,但可以賦值。擴展為索引維度再對該索引元素賦值,其餘擴充位置填充元素 0 a(3:4,4:5)=[1 2;3 4] %通過組合索引賦值,先擴展維度再賦值 a(:,2)=[] %任意行第 2 列變為空:删除 % a(1,2)=[] %矩陣單個元素删除報錯,删除單個元素無法保持矩陣維度 a(2)=[] %線性索引先按列優先擴展為單個數字序列,删除單個元素可行

1.11 重塑矩陣

1.重塑矩陣包括矩陣的元素重排、旋轉、翻轉、移位、排序等

2.認識函數

元素重排 reshape

旋轉 rot90

左右翻轉 fliplr

上下翻轉 flipud

翻轉 flip

循環移位 circshift

排序 sort

按行排序 sortrows

判斷是否排序 issorted

3.實例演示

%1_11 %作者:freexyn a=[1 2 3 4;5 6 7 8] reshape(a,4,2) %元素重排,參數:矩陣名稱、重排行數、重排列數。重排規則:按列優先重排為所需維度 % reshape(a,3,3) %元素數量不符報錯 rot90(a) %矩陣旋轉:逆時針 90 度 fliplr(a) %矩陣左右翻轉 flipud(a) %矩陣上下翻轉 flip(a,1) %矩陣任意方向翻轉:參數 1 為方向,1 維方向是上下翻轉 flip(a,2) %2 維方向是左右翻轉 circshift(a,[0 2]) %矩陣循環移位:矩陣、移動步長(用向量表示行數、列數),移動方向為坐标軸正方向 circshift(a,[-1 2]) sort(a) %矩陣元素的列排序:默認升序排列(行不保持) sort(a,'descend') %參數:降序排列 issorted(a) %判斷是否按升序已排列 issorted(a,'descend') b=magic(3) sortrows(b) %按行(保持)排序:将行視為整體,不指定參數則默認按每行第 1 元素大小升序排列 sortrows(b,2) %指定參數 2,即按每行第 2 個元素排序 sortrows(b,3)

1.12 矩陣屬性

1.矩陣的屬性

描述矩陣的信息,包括大小、長度、元素數目和維度等

2.認識函數

大小 size

長度 length

元素數目 numel

維度 ndims

3.實例演示

%1_12 a=[1 2 3 4;5 6 7 8] size(a) %矩陣行數列數 length(a) %矩陣長度:取行數、列數中的最大值 length(a') %矩陣轉至後,長度仍為 4 numel(a) %返回元素個數 ndims(a) %矩陣維度數:2 即行和列(2 維度) ndims(a(1,:)) %組合索引提取出第 1 行索引再計算維度,即行向量的維度,結果 2 因仍為行和列(2 維度) ndims(a(1,1)) %提出 1 行 1 列元素計算維度,結果仍為 2,因單元素認為 1*1 矩陣(2 維度)

1.13 特殊矩陣形式

1.特殊的矩陣形式:空矩陣、标量和向量

2.認識函數

判斷空矩陣 isempty

判斷标量 isscalar

判斷向量 isvector

3.概念

3.1 空矩陣

有一個或多個等于零的維度(0×0,0×1,1×0)

3.2 标量

維度為 1×1 的矩陣,在 Matlab 中顯示為單個實數或複數

3.3 向量

維度為 1×n 或 n×1 的矩陣,在 Matlab 中顯示為一個行或一個列

4.實例演示

%1_13 %freexyn a=[] %空矩陣 size(a) %獲取行列數 length(a) %矩陣長度 numel(a) %元素個數 ndims(a) %矩陣維度 isempty(a) %判斷是否空矩陣 zeros(0,1) %全 0 矩陣指定一個維度為 0 a=2 %創建标量 size(a) length(a) numel(a) ndims(a) isempty(a) isscalar(a) %判斷是否為标量 a=[1 2 3] %創建向量 size(a) length(a) numel(a) ndims(a) isempty(a) isscalar(a) isvector(a) %判斷是否向量

1.14 多維數組

1.多維數組的創建和索引方法

2.認識函數

維度簡化 squeeze

3.概念

Matlab 中具有多于兩個維度的數據陣列被稱為多維數組

多維數組是普通二維矩陣的擴展

如圖為 3*3*2 的三維數組(維度名稱分别為行、列、頁面)

如何創建一個矩陣matlab(Matlab基礎入門手冊第二章)1

3*3*2 的三維數組

4.實例演示

%1_14 a=[1 2 3;4 5 6;7 8 9] b=[11 12 13;14 15 16;17 18 19] c=a c(:,:,2)=b %數組 c 任意行任意列的第 2 個頁面賦值數組 b。顯示時,對高維數組進行拆分,拆分為 2 維數組顯示 ndims(c) %數組維度 size(c) %行、列、頁面數 d=c %3 維數組賦值給 d d(:,:,:,2)=c %d 的任意行、列、頁面的第 4 個維度的第 2 索引賦值一個 3 維數組 c。顯示時,高維數組依次拆分,遍曆循環顯示每個 2 維數組 ndims(d) %4 維 size(d) %每個維度大小:3 3 2 2 %% 用創建矩陣的函數創建高維數組 zeros(2,2,2) %3 維全 0 數組 repmat(10,[2 2 2]) %矩陣平鋪重塑:将标量 10 平鋪重塑為 2 行 2 列 2 頁面的數組 reshape(c,[2 3 3]) %對高維數組進行重塑:c 是 3*3*2 數組重塑為 2*3*3 數組 c(1,[1 2],2) %組合索引:訪問數組 c 中第 1 行、第 1 和 2 列中、第 2 個頁面的元素 d(:,:,1,1) %(4 維數組)組合索引:任意行、列、第 1 頁面、第四維度 1 的元素 c(1,1) %對于 3 維數組使用低維索引,索引第 1 行第 1 列,不指定頁面,也可索引。高維數組使用低維索引,會自動用 1 補齊末尾索引 a(1,1,1) %低維數組用高維索引。原理:Matlab 中任何數組都可理解為無限尾随 1 的高維數組 e=ones(2,2,1,1,1,1,1) %全 1 矩陣:2 行 2 列,後面尾随 1 無實際意義 e=ones(2,2,1,1,1,2,1) %全 1 矩陣:2 行 2 列,第 6 維為 2,會将 3、4、5、7 維度初始化為0 squeeze(e) %維度簡化:簡化高維數組中不必要的維度

1.15 性能優化

1.在處理大型數組時,兼顧 Matlab 運算性能的優化

2.說明

使用大型數組時,盡量避免創建不必要的副本

處理數組容量不斷變化的問題時,合理的進行預分配内存

把代碼放入程序文件中,比在命令窗口中,運算效率高

3.實例演示

%1_15 a=magic(3) a(3,3)=10 b=a %數據一樣,變量名稱不同,因此 a、b 變量同時指向了同一矩陣 a(3,3)=15 %執行該命令,先預分配内存并複制一份 a 的原始值,保留在上個語句 b 中,然後再改變 a 的元素值 %預分配内存:輸入變量時會初始化分配所需内存,而後續編程中變量變化需要更多内存時,需額外内存支持,可能面臨分布式的内存分布,調用效率受到影響,因此需預分配内存 a=zeros(300,300) %初始化 300*300 全 0 矩陣,Matlab 會分配相應内存,在該維度内對元素進行相應修改替換,确保在完整内存中高效運行 % a=zeros(30000,30000)

(第二章結束,後接第三章)

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
Copyright 2023-2024 - www.tftnews.com All Rights Reserved