向量
分號:分割行
空格或逗號:分割列 建立與訪問 行向量
空格或逗號分割
>> v = [1 2 3] % 等效:v = [1, 2, 3]v = 1 2 3 >> v(2) % 只有一行,所以指定就是列ans = 2
列向量
分號分割
>> v = [1; 2; 3]v = 1 2 3>> v(2) % 只有一列,所以指定就是行ans = 2
矩陣
與向量一樣,空格或逗號分割列,分號分割行
冒號:代表所有,所有行或所有列 建立
>> A = [1, 2; 3, 4] % 一行寫完A = 1 2 3 4>> A = [1, 2; % 分行寫> 3, 4]A = 1 2 3 4
建立技巧
a:c --- 從a到c
a:b:c --- 從a,間隔b,到c
向量也可以用這樣的方法建立
>> A = [1:3; 4:6]A = 1 2 3 4 5 6 >> A = [1:2:5; 2:2:6]A = 1 3 5 2 4 6
特殊矩陣 單位矩陣
>> eye(3) % 單位矩陣ans =Diagonal Matrix 1 0 0 0 1 0 0 0 1>> flipud(eye(3))ans =Permutation Matrix 0 0 1 0 1 0 1 0 0
轉置矩陣
A = 1 2 3 4>> A'ans = 1 3 2 4
逆矩陣
A = 1 2 3 4>> pinv(A)ans = -2.00000 1.00000 1.50000 -0.50000>> pinv(A) * Aans = 1.00000 0.00000 -0.00000 1.00000
全1矩陣
>> ones(2, 3)ans = 1 1 1 1 1 1
全0矩陣
>> 0*ones(2, 3)ans = 0 0 0 0 0 0>> zeros(2, 3)ans = 0 0 0 0 0 0
隨機矩陣
>> rand(1, 3) % 0~1的隨機數,1行3列ans = 0.99291 0.65946 0.95102
高斯分布矩陣
>> randn(1, 3) % 高斯分布ans = 0.14646 2.02587 1.33266
訪問
冒號:代表所有,所有行或所有列 訪問元素
A = 1 2 3 4 5 6 7 8 9 >> A(2, 2) % 第二行,第二列,先定行再定列ans = 5
訪問單行或單列
>> A(1, :) % 第一行,所有,元素ans = 1 2 3 >> A(:, 2) % 第二列,所有,元素ans = 2 5 8
訪問多行或多列
>> A(:, [1, 3]) % 第一列和第三列,所有,元素ans = 1 3 4 6 7 9>> A([1, 3], :) % 第一行和第三行,所有,元素ans = 1 2 3 7 8 9
串連
C = [A B],把B按列加到A上,產生C
C = [A; B],把B按行加到A上,產生C 添加元素
>> A = [1]A = 1>> A = [A, 2] % 把2,按列,添加到A上,再賦給AA = 1 2 >> A = [A; 3] % A有兩列,3隻有一列,規模不匹配error: vertical dimensions mismatch (1x2 vs 1x1)
添加行或列
>> A = [A; [3, 4]] % 將向量[3, 4],作為行,添加到A上,在賦給AA = 1 2 3 4 >> A = [A, [5; 6]] % 將向量[5, 6],作為列,添加到A上,在賦給AA = 1 2 5 3 4 6
矩陣串連
>> A = [1, 2; 3, 4]A = 1 2 3 4>> B = [5, 6; 7 ,8]B = 5 6 7 8>> [A; B] % 將B,作為行,添加到A上ans = 1 2 3 4 5 6 7 8
所有的資料放入一個向量中
>> AA = 1 2 3 4>> A(:)ans = 1 3 2 4>> A(:)'ans = 1 3 2 4
賦值
在訪問基礎上,給定相同規模的資料
A = 1 2 3 4 5 6 7 8 9>> A(3, 3) = 10 % 修改單個元素的值A = 1 2 3 4 5 6 7 8 10>> A(1, :) = [0, 0, 0] % 修改一行的值A = 0 0 0 4 5 6 7 8 10>> A(2:3, 2:3)ans = 5 6 8 10>> A(2:3, 2:3) = [0, 0; 0, 0] % 修改指定矩陣的值A = 0 0 0 4 0 0 7 0 0
運算 加,減
>> A = [1 1; 1 1]A = 1 1 1 1>> B = [2 2; 2 2]B = 2 2 2 2>> A + Bans = 3 3 3 3>> A - Bans = -1 -1 -1 -1>> A - 1ans = 0 0 0 0
相乘
>> A = [1 2; 3 4]A = 1 2 3 4>> B = [5 6; 7 8]B = 5 6 7 8>> A * Bans = 19 22 43 50>> -A % -1 * Aans = -1 -2 -3 -4
點運算
對應元素運算
維度相同:對應元素相乘
行維度相同:每行對應元素相乘
列維度相同:每列對應元素相乘
A .* B = B .* A
乘 *;除 /; 平方 ^;等 維度相同
A = 1 1 1 1B = 2 3 2 3>> A .* Bans = 2 3 2 3
行維度相同
A = 1 1 1 1B = 5 6>> A .* Bans = 5 6 5 6
列維度相同
A = 1 1 1 1B = 5 6>> A .* Bans = 5 5 6 6
點除
矩陣乘以常數,A * 2,除可以是,A / 2
反過來,2 * A沒問題,2 / A 就不行,要用2 ./ A
A = 1 2 3 4>> 1 ./ Aans = 1.00000 0.50000 0.33333 0.25000
邏輯
每一個元素做比較,標記0或1
>, <, ==, !=(或~=), &&, ||
A = 1 2 3 4>> A > 2ans = 0 0 1 1
位元運算
或 | ,函數xor
且 &
非 ~
異或 ^ 控制語句 if
i = 1>> if i == 1> disp(1)> elseif i == 2> disp(2)> else> disp(3)> end
for
>> for i = 1:3 % 從1到3> disp(i)> end 1 2 3
while
>> while i <= 3> disp(i)> i = i + 1> end 1 2 3
break,continue
與C、C++、Java沒有區別 函數
size:擷取矩陣維度
length:擷取最大維度
who:變數列表
whos:變數詳情
clear 變數名:刪除指定變數
clear:刪除所有變數
find:返回符合條件元素的下標
log:log以e為底
exp:e的多少次方
abs:絕對值
floor:向下取整
ceil:向上取整
sum:求和
prop:求積 size
擷取矩陣維度
A = 1 2 3 4 5 6>> aSize = size(A)aSize = 3 2 >> size(A, 1) % 3行ans = 3>> size(A, 2) % 2列ans = 2
length
擷取最大維度
A = 1 2 3 4 5 6>> length(A) % 輸出最大維度ans = 3
who
變數列表
>> who % 現在都有哪裡變數Variables in the current scope:A aSize ans featuresX w
whos
變數詳情
>> whos % 變數詳情Variables in the current scope: Attr Name Size Bytes Class ==== ==== ==== ===== ===== A 3x2 48 double aSize 1x2 16 double ans 1x20 20 char featuresX 27x2 432 double w 1x10000 80000 doubleTotal is 10082 elements using 80516 bytes
clear
刪除變數
>> clear featuresX>> whoVariables in the current scope:A aSize ans w>> clear % 清除全部變數>> who % 一個變數都沒有了
find
返回符合條件元素的下標
A = 5 6 7 8>> [r, c] = find(A > 6) % 符合要求的是:第二行第一個和第二行第二個r = 2 2c = 1 2
sum
求和
>> A = [1, 2; 3, 4]A = 1 2 3 4>> sum(A) % 等效:sum(A, 1)ans = 4 6 >> sum(A, 2)ans = 3 7
prod
求積
>> AA = 1 2 3 4>> prod(A) % 等效:prod(A, 1)ans = 3 8>> prod(A, 2)ans = 2 12
max 向量
>> a = [1 5 2 3.3]a = 1.0000 5.0000 2.0000 3.3000>> max(a)ans = 5>> [val, ind] = max(a)val = 5ind = 2
矩陣比較
兩個矩陣比較每個元素,保留大的
>> A = rand(3)A = 0.2620788 0.6346345 0.4659161 0.0880455 0.1258945 0.0079559 0.0296765 0.7917592 0.4321800>> B = rand(3)B = 0.039237 0.672424 0.214649 0.491320 0.362929 0.197626 0.821090 0.675265 0.698960>> max(A, B)ans = 0.26208 0.67242 0.46592 0.49132 0.36293 0.19763 0.82109 0.79176 0.69896
行與列的最大值
參數二:與之比較的矩陣
參數三:按行還是按列
>> A = [1 2; 3 4]A = 1 2 3 4>> max(A) % 每列最大值ans = 3 4>> max(A, [], 1) % 每列最大值ans = 3 4>> max(A, [], 2) % 每行最大值ans = 2 4
randperm
產生亂序序列
>> A = [2, 3, 4 ,5 ,6]A = 2 3 4 5 6>> rand_indices = randperm(length(A))rand_indices = 1 2 4 5 3>> A(:, rand_indices(1:3))ans = 5 6 2
自訂函數 建立步驟
建立存放函數的檔案(檔案名稱要與函數名相同,.m結尾)
square.m
建立函數
% 一個傳回值function 傳回值 = 函數名(參數列表) 函數體end% 多個傳回值function [傳回值1, 傳回值2] = 函數名(參數列表) 函數體end
function y = square(x) y = x^2;endfunction [y1, y2] = squareAndCube(x) y1 = x^2; y2 = x^3;end
調用
進入到存放函數檔案的目錄
添加存放函數檔案的目錄,到,搜尋路徑
>> cd Downloads/ % 進入存放函數檔案的目錄>> square(2)ans = 4>> addpath('~/Downloads') % 添加到搜尋路徑>> cd ..>> square(2)ans = 4 資料 路徑
與Linux命令一樣
>> pwd % 當前路徑ans = /Users/XXX>> cd ~/Developer>> pwdans = /Users/XXX/Developer>> ls % 列出目錄檔案和檔案夾>> cd .. % 回到上級目錄
載入與儲存
>> load featuresX.dat % 載入資料,變數名為featuresX>> data = load('ex1data1.txt'); % 變數名為data>> save featuresX.mat featuresX; % 將featuresX中的資料儲存到featuresX檔案中>> save hello.txt v -ascii % 將變數v中得資料已ascii編碼方式儲存到hello.txt中 其他 命令
簡化命令列:PS1('>> ');
關閉圖表:close或close all
命令列清屏:clc 注釋
%後為注釋 列印 自動列印
a = 3 % 會列印資料a = 3; % 不會列印資料,分號可以防止輸出
格式化
disp(pi) % 輸出:3.1416disp(sprintf('pi is %.2f', pi)) % c語言風格 預設格式
format long % 修改預設列印格式
協助
help size % 查看size函數的協助文檔help help % 查看help函數的協助文檔
圖 plot 屬性
LineWidth:線寬
MarkerFaceColor:標記顏色
MarkerSize:標記大小 x,y軸
ylabel('x');
xlabel('y'); 長條圖
>> w = -6 + sqrt(10)*randn(1, 10000);>> hist(w)>> hist(w, 30) % 30組
from: https://segmentfault.com/a/1190000004204177