Matlab操作矩陣的相關方法
下面這篇文章主要是對吳恩達老師機器學習中matlab操作的一個整理和歸納
一、基本操作
1.生成矩陣(ones、zeros)
A = [1 2;3 4;5 6] #生成3行4列的矩陣
B = [1 2 3] #B就是一個行向量
C = [1;2;3] #定義c為一個列向量
D = 1:0.1:2 #定義開始值為1,步長為0.1,結束值為2的一個行向量
E = 1:6 #定義開始值為1,步長默認為1,結束值為6的行向量
ones(2,3) #矩陣中所有元素都為1 定義一個2行3列的矩陣
zeros(2,3) #矩陣中所有的元素都為0 定義一個2行3列的矩陣
2.生成隨機矩陣(rand、randn)
rand(1,3) #生成1行3列的隨機矩陣
randn(2,3) #生成高斯隨機矩陣,高斯隨機矩陣即為標准差或方差為1
3.生成單位矩陣(eye(n))
eye(n) #生成n行n列的單位矩陣
4.幫助命令(help)
help 變量名 #可查看函數的API詳解
二、移動數據
1.操作.txt文件(load)
1.1 加載.txt文件並且拆分文件的行和列的值
data = load('文件路徑') #加載文件
獲取多列的數據(獲取多行的數據和多列類似,只需要修改第一個參數即可)
data(:,1) #拿到所有行第一列的數據
data(:,1:2) #拿到所有行第一列和第二列的數據
data(:,1:3) #拿到所有行第一列、第二列和第三列的數據
data(:,[1,3]) #拿到所有行第一列和第三列的數據
將矩陣所有的數據扁平化為一列
data(:)
將矩陣所有的數據扁平化為一行
data(:)'
1.2 將數據保存為.txt文件
v = data(:,1) #拿到第一列的數據
save test.txt v -ascii #將數據保存到test.txt文件中
2.矩陣的操作
2.1 獲得矩陣的行數和列數(size())
size(A) #返回一個1行2列的矩陣 分別是矩陣的行數和列數
size(A,1) #返回矩陣的行數
size(A,2) #返回矩陣的列數
2.2 拿到矩陣的最大維度(length())
length(A) #獲得矩陣的行數和列數中維度較大的一個
2.3 通過矩陣索引獲取某一個值
A(m,n) #索引到矩陣m行n列的位置
2.4 修改矩陣的某一行或者某一列
A(:,2) = [10;11;12] #修改矩陣第二列的數據
2.5 在矩陣中添加一行新的數據
A = [A,[10;11;12]] #向矩陣中添加一行新的數據
C=[A B]
2.6 矩陣的結合
橫向結合:
A = [1 2;3 4;5 6]
B = [11 12;13 14;15 16]
C = [A B]
縱向結合:
C= [A;B]
三、計算數據
1.A.*B(矩陣之間的乘積)
A .*B # A中對應位置元素和B中對應位置元素的乘積
2.A.^2 (矩陣自身的平方)
A.^2 #矩陣A的平方(A矩陣中的每個元素都平方)
3.1./A(矩陣中每個元素的倒數)
1./A 矩陣A中每個元素分別求倒數
4.log(A) (對矩陣中每個元素求對數) ,exp(A)(對A中的每個元素以e的底數)
5.abs(A)(對矩陣中的每個元素求絕對值)
6.-A(對矩陣中的每個元素求相反數)
7.A+1(對矩陣中每個對應的元素+1)
8.A’(A的轉置)
9.一些有用的函數
求矩陣中最大的一個值:
max(max(A))
或者
max(A(:)) 首先扁平化A成為一個列向量,然后求最大值
max是默認求每列的最大值:
max(A) #求矩陣A的最大值(如果A是矩陣,會拿到每一列的最大值)
max(A,[],1) #拿到矩陣A中每一列的最大值
max(A,[],2) #拿到矩陣A中每一行的最大值
[val, ind] = max(a) #返回矩陣A中的最大值和索引
A<3 (對應元素的比較 如果小於3返回1,如果大於3返回0)
find(A<3) #找到A中所有小於3的元素,並且返回他們的索引
A=magic(3) #任意行、列、對角的元素相加的和等於相同的值
[r,c] = find(A>=7) #拿到所有大於等於7的元素的所在行和列
sum(A) #獲得矩陣中所有元素的和
sum(A,1) #獲得矩陣中每一列相加的和
sum(A,2) #獲得矩陣中每一行相加的和
sum(sum(A)) #獲得所有元素的值
prod(A) #獲得矩陣中所有元素的乘積
floor(A) #對矩陣中所有元素向下取整
ceil(A) #對矩陣中所有元素向上取整
10.逆矩陣
pinv(A) #求A得逆矩陣
pinv(A)*A #就會拿到單位矩陣
四、數據繪制
1.繪制正弦函數
t = [0:0.01:0.98];
y1 = sin(2*pi*4*t);
plot(t,y1);
2.繪制余弦函數
t = [0:0.01:0.98];
y2 = cos(2*pi*4*t);
plot(t,y2);
3.同時繪制正弦函數和余弦函數
t = [0:0.01:0.98];
y1 = sin(2*pi*4*t);
y2 = cos(2*pi*4*t);
plot(t,y1);
hold on; #hold on 的作用是在舊的圖像上繪制新的圖像
plot(t,y2,'r')
xlabel('times'); #添加橫軸的label
ylabel('values'); #添加縱軸的label
legend('sin','cos') #將圖例添加到右上角
title('my plot') #給圖像一個title
close; #關閉圖像
figure(1);plot(t,y1);
figure(2);plot(t,y2); #給不同的圖像命名
4.將圖像分為一個1*2的格子
subplot(1,2,1) #前兩個參數的意思是分為1*2的格子,后面一個參數的意思是當前使用第一個格子
5.改變軸的刻度
axis([0.5 1 -1 1]) #(xmin xmax ymin ymax)
6.清除一副圖像(clf)
7.可視化一個矩陣
A = magic(5)
imagesc(A);
imagesc(A), colorbar, colormap gray; #一個灰度分布圖