以矩阵某一列的数值大小做排序依据
Matlab中对二维数组排序
在Matlab中常有对二维数组按照某列数值大小进行行排序的需求,sortrows函数可以实现这个功能
sortrows(A):对数组A按照第一列(默认)数值大小进行行排序
[1 2 3;
3 3 4;
2 4 5]
排序后:
[1 2 3;
2 4 5;
3 3 4]
同一行的每列数值保持不变。关于sortrows函数更多用法参考matlab helps.
要注意的是,一定要接住sortrows函数的返回值
rcd;
sortrows(rcd);% 按第一列排序
rcd %这样rcd数组是不会发生改变的
应该
rcd=sortrows(rcd);% 按第一列排序
矩阵加一行 (分号)
A=[1 2 3;4 5 6;7 8 9];
row=[0 0 0];
A_row=[A;row];
display(A_row);
矩阵加一列 (空格)
A=[1 2 3;4 5 6;7 8 9];
column=[0;0;0]; %一共三行,用“;”分开
A_column=[A column];
display(A_column);
矩阵第i列加上一列的值
tmp是n*1 的列向量
% for q=1:n
% u(q,i)=tmp(q);
% end
u(:,i)=u(:,i)+tmp;
以下三种做法都不恰当(第三种没错)
u=u+tmp %u的每一列都会加上tmp列向量
% u=[u tmp];
%本来想不先定义u的列数,每算出一个时域的一列就给u多加一列,但是代码中访问了u(j,i-1),虽然没有数组越界,由于u的列数暂时不够,还是会报错
若要访问u(j,i)算出一列加上一列不好,应该为该列加上算出的值
% u=u+tmp %u的每一列都会加上tmp列向量
% u(:,2)=tmp %可以加上,但是不加分号自动输出的是整个u,不方便观测tmp的值
可测试如下样例
u=ones(4)
tmp=2*ones(4,1)
% u=[u tmp]
u=u+tmp %u的每一列都会加上tmp列向量
u(:,2)=tmp %可以加上,但是不加分号自动输出的是整个u,不方便观测tmp的值
删除一列
u(:,i)=[]
A=[1,2,3;4,5,6;7,8,9]
A =
1 2 3
4 5 6
7 8 9
删除行:A(2,:)=[]
A =
1 2 3
7 8 9
删除列:
A(:,2)=[]
A =
1 3
7 9
diag 创建对角矩阵或获取矩阵的对角元素
语法
D = diag(v)
D = diag(v,k)
x = diag(A)
x = diag(A,k)
说明
D = diag(v) 返回包含主对角线上向量 v 的元素的对角矩阵。
D = diag(v,k) 将向量 v 的元素放置在第 k 条对角线上。k=0 表示主对角线,k>0 位于主对角线上方,k<0 位于主对角线下方。
x = diag(A) 返回 A 的主对角线元素的列向量。
x = diag(A,k) 返回 A 的第 k 条对角线上元素的列向量。
diag例子
diag用于创建矩阵很好
clc,clear
x=[1 1 1 1]
ones(1,length(x)-1)
A=-2*eye(4)+diag(ones(1,length(x)-1),1)+diag(3*ones(1,length(x)-1),-1)