張智星 jang@cs.nthu.edu.tw http://www.cs.nthu.edu.tw/~jang 清大資工系 多媒體檢索實驗室 第九章: 矩陣的處理與運算 張智星 jang@cs.nthu.edu.tw http://www.cs.nthu.edu.tw/~jang 清大資工系 多媒體檢索實驗室.

Slides:



Advertisements
Similar presentations
MATLAB 程式設計入門篇 矩陣的處理與運算 張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室.
Advertisements

Matlab 教學 Speaker :陳珮妮 Date : 2013/03/14 1. Outline  MATLAB 簡介  算術邏輯運算  Matlab 陣列  Matlab 矩陣 2.
第 5 章 中國的都市.
黃聰明 臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 臺灣師範大學數學系.
組長:5號-周辰瑜 組員:4號-王耀賢 10號-康叡維 11號-張佳文 27號-鍾昱卉
中五級中史科及通識科跨科研習 研習大澳的「宗教文化」─ 廟宇的研習 指導老師:周婉儀老師 組員: 陳偉欽 5a (15)
引導者的角色 組別:第5組 4A1I0003 劉芷媛 4A1I0004 陳安琪 4A1I0014 陳佳瑩 4A1I0046 葉倢茹
興華之寶.
第四章 MATLAB编程基础 4.1 概述 4.2 流程控制 4.3 脚本文件 4.4 函数文件 4.5 M文件调试 4.6 M文件性能分析
您買美元了嗎? 退休規劃 全球外幣保單.
指導老師:楊淑娥 組別:第一組 成員:劉怡萱4a0i0066 吳珮瑜4a0i0070 林秋如4a0i0075 陳婉婷4a0i0076
組員:4A140013張瓊云 4A1I0039石宜芬 4A1I0909許峻綱 指導老師:王立杰老師
古文閱讀 – 像虎伏獸 明 劉基 組員: 5號江依倫 6號江若薇 12號張珉芫 32號蔡燕如.
Introduction to Matlab
Matlab教學 Speaker:林昱志 Date:2012/10/18.
1012 MATLAB 教學 彭奕翔 2013/02/27.
教師敘薪實務解說 大墩國小人事室 吳莉真
性別透視鏡 鳳鳴電台 高宜君老師.
第4章 数组 数组是由一定数目的同类元素顺序排列而成的结构类型数据 一个数组在内存占有一片连续的存储区域 数组名是存储空间的首地址
指導老師:陳韻如 班級:幼保二甲 姓名:林靜宜 學號:4A0I0033
國語文好點子趴辣客教學食譜 甜點:〈焦糖鳥布蕾〉
TOP100 案例标题 徐华海 架构师 当当.
Matlab及其应用 鲍文 哈尔滨工业大学 先进动力控制与可靠性研究所
C语言程序设计 课程 第5章 数组 主讲:李祥 博士、副教授 单位:软件学院软件工程系.
MATLAB介紹.
第四章 线性代数问题求解 矩阵 线性方程组的直接解法 线性方程组的迭代法 线性方程组的符号解法 稀疏矩阵技术 特征值与特征向量.
張智星 清大資工系 補充內容:方煒 台大生機系 小幅修改:吳俊仲 長庚機械系
張智星 清大資工系 補充內容:方煒 台大生機系
第 7 章 陣列 (Array).
范洪源 臺灣師範大學數學系 MATLAB 基本功能介紹 范洪源 臺灣師範大學數學系.
第五章 数组和 广义表 数组 稀疏矩阵 广义表.
Matlab教學 Speaker:林昱志 Date:2012/10/25.
Matlab M檔案 方煒 台大生機系.
第2章 MATLAB矩阵及其运算 2. 1 变量和数据操作 2. 2 MATLAB矩阵 2. 3 MATLAB运算 2. 4 矩阵分析 2
數學與電腦 的初相識 汪群超 個人網址: 變有不可者三,有不可不變者三: 能力未至不可變也、 學識未敷不得變也、 功侯未到不能變也。
MATLAB 程式設計入門篇 程式碼與記憶體之最佳化
University of Electronic Science and Technology, China
親愛的老師您好 感謝您選用本書作為授課教材,博碩文化準備本書精選簡報檔,特別摘錄重點提供給您授課專用。 說明: 博碩文化:
Chapter 2 Basic Elements of Fortran
張智星 (Roger Jang) 台大資工系 多媒體檢索實驗室
4.1 一維陣列 4.2 for(:) 迴圈 4.3 動態陣列 4.4 二維陣列 4.5 非矩形陣列
Matlab基础介绍 Matlab 简介 Matlab 的安装与启动 Matlab 编程基础 Matlab 在数字信号处理课程中的应用.
黃聰明 國立臺灣師範大學數學系 MATLAB 基本功能介紹 黃聰明 國立臺灣師範大學數學系
引 言.
第九章: 矩陣的處理與運算 張智星 (Roger Jang)
Chapter 2 聯立線性方程式與矩陣 授課教師:李金鳳(Amy Lee)
MATLAB 程式設計入門篇 初探MATLAB
1.3 矩阵与数组 MATLAB中矩阵的生成 MATLAB矩阵操作 数组创建与运算.
第2章 MATLAB程序设计 编者.
数学建模 江西财经大学 数学与管理决策系 制作:华长生 华长生制作.
共有六個運算性質 包括它的證明以及相關題型
陣列 (Array)      授課老師:蕭志明.
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
計算機程式 授課教師:廖婉君教授 第六單元 Arrays
MATLAB 程式設計入門篇 初探MATLAB
學這些有什麼好處呢? 為了把資料作更客觀之總結描述或比較多組資料。總而言之,就是要找出一個數能代表整組數據。
張智星 (Roger Jang) 清大資工系 多媒體檢索實驗室
本章學習目標 認識陣列裡元素的結構 學習多維陣列的建立 學習編修矩陣的內容 學習基本的矩陣數學運算
实验教学 MATLAB在行列式和矩阵中的应用 授课教师:杨梦云.
MATLAB 程式設計入門篇 初探MATLAB
程式的時間與空間 Time and Space in Programming
陣列 東海大學物理系‧資訊教育 施奇廷.
陣列的位址計算.
第二讲 基本数据类 型及数组等 此为封面页,需列出课程编码、课程名称和课程开发室名称。
西南科技大学网络教育系列课程 数学软件 数学软件 第3讲 MATLAB数组与运算 主讲教师: 鲜大权 副教授 西南科技大学理学院数学系.
Introduction to Matlab
智慧財產權管理講次36 積體電路電路布局保護法(1) 主講:吳銘圳
第2章 陣列結構 資料結構設計與C++程式應用
Q1(a) 小偉打算編寫一個程序。該程序把兩個44的表內的數字相加。表3內的數字是由表1和表2應格子內的數字相加而成。例如:
数学实验之 回归分析(2).
Presentation transcript:

張智星 jang@cs.nthu.edu.tw http://www.cs.nthu.edu.tw/~jang 清大資工系 多媒體檢索實驗室 第九章: 矩陣的處理與運算 張智星 jang@cs.nthu.edu.tw http://www.cs.nthu.edu.tw/~jang 清大資工系 多媒體檢索實驗室

9-1 矩陣的索引或下標 矩陣 A 中,位於第 i 橫列、第 j 直行的元素可表示為 A(i, j) i 與 j 即是此元素的下標(Subscript)或索引(Index) MATLAB 中,所有矩陣的內部表示法都是以直行為主的一維向量 A(i, j) 和 A(i+(j-1)*m) 是完全一樣的~m為矩陣A的列數 我們可以使用一維或二維下標來存取矩陣

矩陣的索引或下標

矩陣的索引或下標 可以使用矩陣下標來進行矩陣的索引(Indexing) 用冒號(:), 取出一整列或一整行 A(4:5,2:3) -取出矩陣 A 的 第四、五 橫列與 二、三 直行所形成的部份矩陣 A([9 14; 10 15]) - 用一維下標的方式來達到同樣目的 用冒號(:), 取出一整列或一整行 A(:, 5) -取出矩陣 A 的第五個直行 用 end 這個保留字來代表某一維度的最大值 A(:, end) - 矩陣 A 的最後一個直行 可以直接刪除矩陣的某一整個橫列或直行 A(2, :) = [] – 刪除A矩陣的第二列 A(:, [2 4 5]) = [] - 刪除 A 矩陣的第二、四、五直行

矩陣的索引或下標 可依次把矩陣 A 和其倒數「並排」起來,得到新矩陣 B 用 diag 指令取出矩陣的對角線各元素 B = [A 1./A] - 1./A 是矩陣 A 每個元素的倒數 用 diag 指令取出矩陣的對角線各元素 d = diag(B) - 取出矩陣 B 的對角線元素 用 reshape 指令來改變一個矩陣的維度 C = reshape(B, 2, 8) - 將矩陣 B 排成 2×8 的新矩陣 C 注意!! MATLAB 會先將矩陣 B 排成一個行向量(即 MATLAB 內部的矩陣表示法),再將此行向量塞成 2×8 的新矩陣

9-2 特殊用途矩陣 產生各種特殊用途矩陣的好用指令 : 指令 說明 zeros(m, n) 產生維度為 m×n ,構成元素全為 0 的矩陣 9-2 特殊用途矩陣 產生各種特殊用途矩陣的好用指令 : 指令 說明 zeros(m, n) 產生維度為 m×n ,構成元素全為 0 的矩陣 ones(m, n) 產生維度為 m×n ,構成元素全為 1 的矩陣 eye(n) 產生維度為 n×n ,對角線的各元素全為 1 ,其他各元素全為 0 的單位矩陣 pascal(m, n) 產生維度為 m×n 的 Pascal 矩陣 vander(m, n) 產生維度為 m×n 的 Vandermonde 矩陣 hilb(n) 產生維度為 n×n 的 Hilbert 矩陣 rand(m, n) 產生 [0, 1] 均勻分佈的亂數矩陣,其維度為 m×n randn(m, n) 產生 µ = 0, σ= 1 的正規分佈亂數矩陣,其維度為 m×n magic(n) 產生維度為 n×n 的魔方陣,其各個直行、橫列及兩對角線的元素和都相等

Hilbert矩陣 and 魔方陣 hilb(n) 指令可以產生 n×n 的 Hilbert 矩陣 Hilbert 矩陣的特性: 當矩陣變大時,其反矩陣會接近 Singular(即矩陣的行列式會接近於 0) Hilbert 矩陣常被用來評估各種反矩陣計算方法的穩定性 magic(n) 可以產生一個 n×n 的魔方陣(Magic Matrix), 其各個直行、橫列及兩對角線的元素值總和都相等

均勻和高斯分布 rand 指令及 randn 指令則常用於產生亂數矩陣 範例9-11: matrix11.m x1 = rand(10000, 1); x2 = randn(10000, 1); subplot(2,1,1); hist(x1, 40); title('均勻分佈'); subplot(2,1,2); hist(x2, 40); title('高斯分佈'); set(findobj(gcf, 'type', 'patch'), … 'EdgeColor', 'w'); % 改邊線為白色

9-3 矩陣的數學運算 矩陣的加減與一般純量(Scalar)的加減類似 相加或相減的矩陣必需具有相同的維度 9-3 矩陣的數學運算 矩陣的加減與一般純量(Scalar)的加減類似 相加或相減的矩陣必需具有相同的維度 範例9-12: matrix12.m C = 13 37 58 24 矩陣與純量可以直接進行加減,MATLAB 會直接將加減應用到每一個元素 >> A = [1 2 3 2 1] + 5 A = 6 7 8 7 6 A = [12 34 56 20]; B = [1 3 2 4]; C = A + B

矩陣的乘法與除法 純量對矩陣的乘或除,可比照一般寫法 >> A = [123 , 442]; >> C = A/3 >> B = 2*A C = B = 41.0000 147.3333 246 884 欲進行矩陣相乘,必需確認第一個矩陣的直行數目( Column Dimension) 必需等於第二個矩陣的橫列數目(Row Dimension) 範例9-13: matrix12.m C = 3 4 5 6 8 10 矩陣的除法,常藉由反矩陣或解線性方程式來達成 A = [1; 2]; B = [3, 4, 5]; C = A*B

矩陣的次方運算 矩陣的次方運算,可由「^」來達成,但矩陣必需是方陣,其次方運算才有意義 範例9-14: matrix14.m B = 91 67 67 67 91 67 67 67 91 在「*」,「/」及「^」之前加上一個句點,MATLAB 將會執行矩陣內「元素對元素」(Element-by-element) 的運算 A = magic(3); B = A^2 A = [12; 45]; B = [2; 3]; C = A.*B % 注意「*」前面的句點 D = A./B % 注意「/」前面的句點 E = A.^2 % 注意「^」前面的句點

轉置和「共軛轉置」矩陣 複數矩陣 z,其「共軛轉置」矩陣(Conjugate Transpose) 可表示成矩陣 z' 範例9-16: conjTranspose01.m w = 1.0000-1.0000i 3.0000 2.0000 1.0000-2.0000i 想得到任何矩陣 z 的轉置(Transpose),則可表示成矩陣 z. ' 範例9-17: transpose01.m 1.0000+1.0000i 3.0000 2.0000 1.0000+2.0000i 若 z 為實數,則 z' 和 z.' 的結果是一樣的 i = sqrt(-1); % 單位虛數 z = [1+i, 2; 3, 1+2i]; w = z' % 共軛轉置(注意 z 後面的單引號) i = sqrt(-1); % 單位虛數 z = [1+i, 2; 3, 1+2i]; w = z.' % 單純轉置(注意 z 後面的句點及單引號)

向量的p-norm 一個向量 a 的 p-norm 可以定義為 p=2 時,此即為向量 a 的長度,或稱歐氏長度(Euclidean Length) 欲求一向量的 p-norm,可使用 norm 指令 norm(x,p) 範例9-18: normVector01.m a = [3 4]; x = norm(a, 1) % x = 7 y = norm(a, 2) % y = 5 z = norm(a, inf) % z = 4

矩陣的p-norm 一個矩陣 A 的 p-norm 可以定義如下: norm 指令亦可用於計算矩陣的 p-norm 範例9-19: normMatrix01.m MATLAB 有相當完整的數學函數,三角函數還有計算向量元素統計量的函數(課本 9-15~9-17) A = [1 2 3; 4 5 6; 7 8 9]; norm(A, 2) % ans = 16.8481

Sort指令 sort 指令可對向量元素進行排序(Sorting) 範例9-20: sort01.m sorted = 1 3 4 5 8 index = 4 1 5 2 3 sorted 是排序後的向量,index 則是每個排序後的元素在原向量 x 的位置 x(index) 即等於 sorted 向量 如何使用 sort 指令加上前例中的 sorted 及 index 來求得原先的向量 x? x = [3 5 8 1 4]; [sorted, index] = sort(x) % 對矩陣 x 的元素進行排序

矩陣的最大元素 找出一矩陣最大元素的位置 範例9-21: max01.m colMax = 23 24 25 21 22 colMaxIndex = 2 1 5 4 3 colMax 代表每一直行的最大值,colMaxIndex 則是每一直行出現最大值的位置 求得 x 的最大元素的位置 範例9-22: max02.m Max value = x(5, 3) = 25 x 的最大元素即是 maxValue,發生位置為 [colMaxIndex(maxIndex), maxIndex] = [5 , 3] 若只要找出一矩陣 x 的最大值,可輸入 max(max)或是 max(x(:)) x = magic(5); [colMax, colMaxIndex] = max(x) x = magic(5); [colMax, colMaxIndex] = max(x); [maxValue, maxIndex] = max(colMax); fprintf('Max value = x(%d, %d) = %d\n', colMaxIndex(maxIndex), maxIndex, maxValue);

9-4 矩陣的內部資料型態 一般矩陣的內部資料型態都是 double(雙精準浮點數),但在 MATLAB 5.3 版之後,也支援不同長度的整數與浮點數資料態 指令 說明 uint8 轉換成帶正負號 、 8 位元的整數,其值域為 [-128,127] uint16 轉換成帶正負號、16 位元的整數,其值域為 [-32768,32767] uint32 轉換成帶正負號、32 位元的整數,其值域為 [-231,231-1] int8 轉換成不帶正負號、 8 位元的整數,其值域為 [0,255] int16 轉換成不帶正負號 、16 位元的整數,其值域為 [0,65535] int32 轉換成不帶正負號 、32 位元的整數,其值域為 [0,232-1] single 轉換成 single(單精準浮點數),佔用 32 位元(4 bytes) double 轉換成double (雙精準浮點數),佔用 64 位元(8 bytes) char 轉換成字元或字串,每個字元佔用(16 位元)(2 bytes)

不同資料的儲存 我們要節省記憶體空間,可以依矩陣元素值的範圍,選用不同的資料來儲存 範例9-23: datatype01.m Name Size Bytes Class x16 10x10 200 uint16 array x32 10x10 400 uint32 array x8 10x10 100 uint8 array x_double 10x10 800 double array x_single 10x10 400 single array Grand total is 500 elements using 1900 bytes uint8 來儲存變數所佔的空間只有 double 的八分之一 ! clear all % 清除所有工作空間的變數 x_double = magic(10); x_single = single(x_double); x32 = uint32(x_double); x16 = uint16(x_double); x8 = uint8(x_double); whos

資料儲存的注意事項 整數資料型態的範圍有限,若超過此範圍,則超出部分將會被「裁掉」 整數資料型態可以比較大小,但不可直接進行數學運算 >> uint8(300) % uint8 的最大值為 255 ans = 255 >> int8(-500) % int8 的最小值為 -128 -128 整數資料型態可以比較大小,但不可直接進行數學運算 >> uint8(20)== 20 % 可比較大小 1 >> uint8(20)-20 % 無法進行數學運算 ??? Error using ==> - Function '-' not defined for variables of class 'uint8'. 若要進行數學運算,需先用 double 指令將之轉成雙精準浮點數才能進行