陣列 (Array) 陣列依其維度可分為一維 二維以及多維 若陣列只有一維, 稱之為向量 (vector); 陣列為二維, 則稱之為矩陣 (matrix) 壹 向量一 建立向量的基本函數 說明 [ ] 建立陣列 -3:3 從 -3 到 3, 間距 1, 建立一個列向量 -3:0.1:3 從 -3 到 3, 間距 0.1, 建立一個列向量 linspace(-3,3) 從 -3 到 3, 建立 100 個元素的列向量 linspace(-3,3,100) 從 -3 到 3, 建立 100 個元素的列向量 length(x) 查詢向量 x 的元素個數 x' 將向量 x 轉置 >> [] [] >> -3:3-3 -2-1 0 1 2 3 >> -3:0.5:3-3.0000-2.5000-2.0000-1.5000-1.0000-0.5000 0 0.5000 1.0000 1.5000 2.0000 2.5000 3.0000 1
>> x=linspace(-3,3) ; >> length(x) 100 二 向量的基本處理函數 min(x) max(x) sum(x) cumsum(x) prod(x) cumprod(x) sort(x) sort(x, 'descend') 說明計算向量最小值計算向量最大值計算向量總和計算向量累積和計算向量乘積計算向量累積乘積和將向量中的元素由小而大排序將向量中的元素由大而小排序 >> x=[2 1 4 3 5] x = 2 1 4 3 5 >> min(x) 1 >> max(x) 5 2
>> sum(x) 15 >> cumsum(x) 2 3 7 10 15 >> prod(x) 120 >> cumprod(x) 2 2 8 24 120 >> sort(x) 1 2 3 4 5 >> sort(x, 'descend') 5 4 3 2 1 3
三 向量元素的擷取與刪除 A=[1,3,5,7,9] B=A*2 A(2) A(2:4) A([2,5]) A(3)=100 A(3:5)=0 A(end) A(5)=[ ] % 取出向量第二個元素 % 取出向量第二至四個元素 % 取出向量第二 五個元素 % 將向量第三個元素以 100 取代 % 將向量第三至五個元素以 0 取代 % 取出向量最後一個元素 % 刪除第五個元素 4
貳 矩陣 一 常用陣列建立函數 zeros(n) zeros(m,n,p..) ones(n) eye(n) eye(m,n) diag(v) magic(n) 說明建立 n n 的全零矩陣建立 m n p.. 全零矩陣建立 n n 的全 1 矩陣建立 n n 的單位矩陣建立 m n 的單位矩陣建立以向量 v 為對角元素的矩陣建立 n n 的魔術方陣 >> zeros(3) 0 0 0 0 0 0 0 0 0 >> zeros(3,2) 0 0 0 0 0 0 >> ones(3) 1 1 1 1 1 1 1 1 1 5
>> eye(3) 1 0 0 0 1 0 0 0 1 >> eye(3,2) 1 0 0 1 0 0 >> diag( [1 2 3] ) 1 0 0 0 2 0 0 0 3 >> magic(3) 8 1 6 3 5 7 4 9 2 6
二 以亂數建立陣列之函數 rand rand(n) rand(m,n,p ) randn randn(n) randn(m,n,p ) 說明產生 0~1 間的齊一分配亂數建立 0~1 間的 n n 齊一分配建立 0~1 間的 m n 齊一分配產生平均數為 0, 標準差為 1 的常態分配亂數建立 n n 的常態分配建立 m n 的常態分配 >> rand 0.7482 >> rand(3) 0.1622 0.5285 0.2630 0.7943 0.1656 0.6541 0.3112 0.6020 0.6892 >> rand(3,2) 0.4505 0.9133 0.0838 0.1524 0.2290 0.8258 >> randn -0.4326 7
>> randn(3) -1.6656-1.1465-0.0376 0.1253 1.1909 0.3273 0.2877 1.1892 0.1746 >> randn(3,2) -0.1867 2.1832 0.7258-0.1364-0.5883 0.1139 8
三 矩陣元素的操作 >> A=[1,2,3 ; 4,5,6 ; 7,8,9] A = 1 2 3 4 5 6 7 8 9 >> A(2, 2) 5 >> A( 2, 2:3 ) 5 6 >> A' % 將矩陣 A 轉置 1 4 7 2 5 8 3 6 9 >> B=A >> B( :, 2:3)=[ ] % (:) 代表一整列或一整行 % 刪除 2 3 直行 B = 1 4 7 >> C=A >> C( [1,3], : )=[ ] % 刪除 1 3 橫列 C = 4 5 6 9
四 取出最大值與最小值所在位置 [val, ind]=max(x) [val, ind]=min(x) [mx col]=max(val) 說明取出陣列 x 中的元素最大值 val 及其所在位置 ind 取出陣列 x 中的元素最小值 val 及其所在位置 ind 找出 val 最大值及其位置 >> A=[1,3,2;8,1,9;10,3,2] A = 1 3 2 8 1 9 10 3 2 >> [val, ind]=max(a) % 以直行為單位取得數值 val = 10 3 9 >> [val,ind]=min(a) ind = 3 1 2 val = 1 1 2 >> [mx col]=max(val) ind = 1 2 1 mx = 2 col = 3 10
五 其他陣列元素相關函數 ( 一 ) 提取矩陣特定元素 說明 diag(a) 取出矩陣 A 主對角線元素 diag(a, k) 取出矩陣 A 第 k 個主對角線元素 (k=..-2,-1,0,1,2..) triu(a) 取出矩陣 A 主對角線以上元素, 其他元素設為 0 triu(a, k) 取出矩陣 A 第 k 個主對角線以上 (upper) 元素, 其他元素設為 0 tril(a) 取出矩陣 A 主對角線以下 (lower) 元素, 其他元素設為 0 tril(a, k) 取出矩陣 A 第 k 個主對角線以下元素, 其他元素設為 0 A = >> A=[1,2,3;4,5,6;7,8,9] 1 2 3 4 5 6 7 8 9 >> diag(a) 1 5 9 >> diag(a,0) 1 5 9 >> triu(a) 1 3 2 0 1 9 0 0 2 >> tril(a) 1 0 0 8 1 0 10 3 2 11
( 二 ) 重排矩陣元素 fliplr(a) flipud(a) flipdim(a, n) reshape(a,m,n, p) repmat(a,m,n, p) rot90(a) rot90(a, k) 說明將陣列 A 元素左右翻轉 (left/right) 將陣列 A 元素上下翻轉 (up/down) 將陣列 A 元素依第 n 個維度翻轉將陣列 A 元素由上而下, 由左而右重新排列成 m n p 矩陣將陣列 A 類似排磁磚方式排成 m n p 矩陣將矩陣逆時鐘旋轉 90 度將矩陣逆時鐘旋轉 k 90 度,k 為整數 >> A=magic(3) A = 8 1 6 3 5 7 4 9 2 >> fliplr(a) 6 1 8 7 5 3 2 9 4 >> flipud(a) 4 9 2 3 5 7 8 1 6 >> reshape(a, 1, 9) 8 3 4 1 5 9 6 7 2 12
>> repmat(a, 2, 2) 8 1 6 8 1 6 3 5 7 3 5 7 4 9 2 4 9 2 8 1 6 8 1 6 3 5 7 3 5 7 4 9 2 4 9 2 >> rot90(a) 6 7 2 1 5 9 8 3 4 >> rot90(a, 3) 4 3 8 9 5 1 2 7 6 13
( 三 ) 合併陣列 說明 [A,B] 橫向合併 [A;B] 垂直合併 cat(1,a,b, ) 以第一個維度方向排列合併 ( 相當垂直合併 ) cat(2,a,b, ) 以第二個維度方向排列合併 ( 相當水平合併 ) cat(3,a,b ) 以第三個維度 ( 頁 ) 方向排列合併 cat(4,a,b ) 以第四個維度方向排列合併 >> A=[1 2 3 ; 4 5 6] A = 1 2 3 4 5 6 >> B=2*A B = 2 4 6 8 10 12 >> [A, B] 1 2 3 2 4 6 4 5 6 8 10 12 >> [A ; B] 1 2 3 4 5 6 2 4 6 8 10 12 14
六 矩陣基本運算函數 說明 A+B A-B A*B A/B A' 計算 A 矩陣的共軛矩陣 ( 但當元素為實數時, 將等於轉置矩陣 ) inv(a) 計算矩陣反矩陣 (inverse) det(a) 計算矩陣行列式 (determinate) expm(a) 計算矩陣的指數 logm(a) 計算矩陣的對數 sqrtm(a) 計算矩陣的開平方根 15
七 矩陣左除與右除 A\B B/A 說明 1 A 左除 B, 相當於 A B或 AX=B 的解 B 右除 A, 相當於 B A 1 或 XA=B 的解 16
八 矩陣內的元素對元素之運算 說明 A.*B 將 A 矩陣每一個元素乘以 B 矩陣每一個相對應的元素 A.^n 計算方陣 A 每一個元素的 n 次方 A. ' 計算矩陣 A 的轉置矩陣 A./B 將 A 矩陣每一個元素除以 B 矩陣每一個相對應的元素 A.\B 將 B 矩陣每一個元素除以 A 矩陣每一個相對應的元素 17
九 查詢陣列資訊相關函數 說明 size(x) 查詢陣列維度 (2X3) length(x) 查詢陣列行數 (3 行數 ) ndims(x) 查詢陣列維數 (2 維 ) numel(x) 查詢陣列元素總數 (number of element)(6 個 ) >> A=[1 2 3 ; 4 5 6] A = 1 2 3 4 5 6 >> size(a) 2 3 >> length(a) 3 >> ndims(a) 2 >> numel(a) 6 18
Matlab 與 R 比較 陣列 array 用途 Matlab R 一維陣列 x=[1 2 3 4] x=c(1,2,3,4) x=[1,2,3,4] 建立向量 用途 Matlab R 由 1 到 10, 間距 1 的向量 x=1:10 x=1:10 由 1 到 10, 間距 2 的向量由 -3 到 3,100 個元素的向量由 -3 到 3,100 個元素的向量 x=1:2:10 x=seq(1,10, 2) x=linspace(-3, 3) x=seq(-3, 3, length=100) y=linspace(-3, 3, 100) x=seq(-3, 3, length=100) 查詢 x 元素個數 length(x) length(x) 將 x 轉置 x matrix(x, byrow=f) x=[0.1, 0.2, 0.3, 0.4] sin(x) x=c(0.1,0.2,0.3,0.4) sin(x) 基本向量處理函數用途 Matlab R 總和 max(x) max(x) 最小值 min(x) min(x) 最大值 sum(x) sum(x) 累積和 cumsum(x) cumsum(x) 乘積 prod(x) prod(x) 累乘和 cumprod(x) cumprod(x) 由小而大排列 sort(x) sort(x) 由大而小排列 sort(x, descend ) sort(x, decreasing=t) 19
查詢陣列資訊函數用途 Matlab R 陣列的維度 size(x) dim(x) 陣列的行數 length(x) ncol(x) 陣列的維數 ndims(x) 陣列元素總數 numel(m) length(x) x=[1,3,5,7,9 ; 2,4,6,8, 10] cumsum(x) x=matrix(1:10, 2, 5) apply(x, 2, cumsum) 多維陣列用途 Matlab R 建立三維陣列 z(:, :, 1)=[1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] z(:, :, 2)=[7 4 2 1 ; 6 1 5 2 ; 3 1 4 5] z(2, 3, 3)=20 常用陣列函數用途 Matlab R 全零方陣 zeros(3) matrix(0, 3, 3) 全零矩陣 zeros(2, 3) matrix(0, 2, 3) 全 1 方陣 ones(3) matrix(1, 3, 3) 全 1 矩陣 ones(2, 3) matrix(1, 2, 3) 單元方陣 eye(3) diag(c(1,1,1)) 單元矩陣 eye(2, 3) 對角矩陣 diag([1 2 3]) diag(c(1,2,3)) 魔術方陣 magic(3) 亂數陣列函數 用途 Matlab R 建立 0 至 1 的齊一分配亂數建立平均數 0, 標準差 1 的齊一分配亂數 rand runif(3) rand(3) rand(3,5) randn rnorm(3) randn(3) randn(3,5) 20
向量與矩陣的提取 用途 Matlab R 由向量中擷取元素 由向量中取出最大 值的位置 由向量中取出最小 值的位置 由矩陣中擷取元素 由矩陣中取出最大 值的位置 將矩陣元素垂直排 列 ( 行向量 ) 將矩陣元素水平排 列 ( 行向量 ) x=[6 7 8 9] x([2 4]) x(2:4) x(end) x( 1: 2: end) x(4)=[] ( 永久刪除 ) [val, ind]=max([4 3 4 8 9 3 2]) [val, ind]=min([4 3 4 8 9 3 2]) y=[1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] y(2, 3) y(3, [1 2 3]) y(3, : ) y=[1 2 3 4 ; 5 6 7 8 ; 9 10 11 12] [val, ind]=max(y) [mx col]=max(val) row=ind(col) y( : ) y(9:12)=[ ] x=c(6,7,8,9) x[c(2,4)] x[2:4] x[ seq(1,4,by=2) ] x[-4] ( 並未永久刪除 ) x=c(4,3,4,8,9,3,2) max(x) which.max(x) x=c(4,3,4,8,9,3,2) min(x) which.min(x) y=matrix(1:12, 3, 4, byrow=t) y[2, 3] y[3, c(1,2,3)] y[3,] 提取矩陣上三角或 下三角 A=magic(4) diag(a) diag(a, 1) diag(a, 0) diag(a, -1) triu(a) triu(a, 1) tril(a) tril(a, -1) 21
矩陣元素的重排 用途 Matlab R A=magic(3) 矩陣翻轉 ( 左右及上下 ) 矩陣翻轉 ( 按維度翻轉,1 為上下垂直,2 為左右水平 ) 按指定行列重新排列元素以排磁磚方式排列矩陣逆時鐘旋轉 90 度或 90 度的倍數 fliplr(a) flipud(a) flipdim(a, 2) reshape(a,1, 9) repmat(a, 2, 2) rot90(a) rot90(a, 2) 陣列的合併 用途 Matlab R 橫向及縱向倂排擴展矩陣 A=[1 2 3; 4 5 6] A=matrix(1:6, 2, 3, byrow=t) B=[7 8 9 ; 10 11 12] B=matrix(7:12, 2, 3, byrow=t) [A, B] cbind(a, B) [A ; B] rbind(a, B) [[A; A],[A ; A]] repmat(a, 2, 2) 陣列的數學運算 用途 Matlab R 轉置矩陣 ( 共軛矩陣反矩陣 A=magic(3) A' A=matrix(c(8,3,4,1,5,9,6,7,2),3,3) t(a) inv(a) solve(a) A^-1 A^-1? A*inv(A) A*solve(A) 行列式值 det(a) det(a) 計算矩陣的指數計算矩陣的對數計算矩陣的開平方根 AX=B, 求 X 1 X= A B=A\B expm(a) logm(a) Z=sqrtm(A) Z^2 A=[3 4 ; 1 2] B=[10 ; 4] 22
inv(a)*b A\B XA=B, 求 X A=[3 4 ; 1 2] 1 X= BA =B/A B=[10 4] B*inv(A) B/A 矩陣相乘 A=[2 4 ; 3 1] B=[3 2 ; 4 6] A*B 矩陣元素對乘其他矩陣元素運算乘除某常數 A.*B A=[2 4 ; 3 1] ; B=[3 2 ; 4 6] ; A.*B A.^2 A.' A./B A.\B A/2 A./2 1/A 1./A 23