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 #就会拿到单位矩阵
eye |
单位矩阵 |
conj |
共轭矩阵 |
zeros |
全零矩阵 |
companion |
伴随矩阵 |
ones |
全1矩阵 |
det |
行列式的值 |
rand |
均匀分布随机阵 |
norm |
矩阵或向量范数 |
genmarkov |
生成随机Markov矩阵 |
nnz |
矩阵中非零元素的个数 |
linspace |
线性等分向量 |
null |
清空向量或矩阵中的某个元素 |
logspace |
对数等分向量 |
orth |
正交基 |
logm |
矩阵对数运算 |
rank |
矩阵秩 |
cumprod |
矩阵元素累计乘 |
trace |
矩阵迹 |
cumsum |
矩阵元素累计和 |
cond |
矩阵条件数 |
toeplitz |
Toeplitz矩阵 |
inv |
矩阵的逆 |
disp |
显示矩阵和文字内容 |
rcond |
逆矩阵条件数 |
length |
确定向量的长度 |
lu |
LU分解或高斯消元法 |
size |
确定矩阵的维数 |
pinv |
伪逆 |
diag |
创建对角矩阵或抽取对角向量 |
qr |
QR分解 |
find |
找出非零元素1的下标 |
givens |
Givens变换 |
matrix |
矩阵变维 |
linsolve |
求解线性方程 |
rot90 |
矩阵逆时针旋转90度 |
lyap |
Lyapunov方程程 |
sub2ind |
全下标转换为单下标 |
hess |
Hessenberg矩阵 |
tril |
抽取下三角阵 |
poly |
特征多项式 |
triu |
抽取上三角阵 |
schur |
Schur分解 |
expm |
矩阵指数 |
mean |
平均值 |
expm1 |
矩阵指数的Pade逼近 |
median |
中值 |
expm2 |
用泰勒级数求矩阵指数 |
prod |
元素积 |
expm3 |
通过特征值和特征向量求矩阵指数 |
sort |
由大到小排序 |
funm |
计算一般矩阵函数 |
std |
标准差 |
logm |
矩阵对数 |
sum |
元素和 |
sqrtm |
矩阵平方根 |
trapz |
梯形数值积分 |
spec |
矩阵特征值 |
corr |
求相关系数或方差 |
gspec |
矩阵束特征值 |
sparse |
稀疏矩阵 |
bdiag |
块矩阵,广义特征向量 |
adj2sp |
邻接矩阵转换为稀疏矩阵 |
eigenmar- |
正则化Markov特征 |
full |
稀疏矩阵转换为全矩阵 |
kov |
向量 |
mtlb_sparse |
将scilab稀疏矩阵转换为matlab稀疏矩阵格式 |
pbig |
特征空间投影 |
sp2adj |
将稀疏矩阵转换为邻接矩阵 |
svd |
奇异值分解 |
speye |
稀疏矩阵方式单位矩阵 |
sva |
奇异值分解近似 |
sprand |
稀疏矩阵方式随机矩阵 |
cumprod |
元素累计积 |
spzeros |
稀疏矩阵方式全零阵 |
cumsum |
元素累计和 |
lufact |
稀疏矩阵LU分解 |
hist |
统计频数直方图 |
lusolve |
稀疏矩阵方程求解 |
max |
最大值 |
spchol |
稀疏矩阵Cholesky分解 |
四、数据绘制
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; #一个灰度分布图