矩阵下标
设A是一个四维矩阵A的i行j列用A(i,j)表示,若引用单一下标则例如A(8)即表示A(4,2)。
若将值存储在矩阵外部元素中,如A(4,5)=7,不会报错,此时A会变成4x5的矩阵,第五列前三行自动补0。
冒号运算符
冒号运算符是MATLAB最重要的运算符之一。
表达式A=1:10
>> A=1:10
A =
1 2 3 4 5 6 7 8 9 10
是包含1到10之间整数的行向量。
若要获取非单位间距的向量,需要指定增量:
100:-7:50
>> 100:-7:50
ans =
100 93 86 79 72 65 58 51
包含冒号的下标表达式引用部分矩阵:
A(1:3,3)
表示A矩阵第三列的前三个数形成的列向量
>> A(1:3,3)
ans =
3
10
6
使用sum(A(1:4,4))计算A矩阵的第四列列总和
sum(A(1:4,4))
>> sum(A(1:4,4))
ans =
34
而sum(A)则是输出一个行向量,其中每个元素是A每列元素和
>> sum(A)
ans =
34 34 34 34
而计算第四列的总和有一个更好方法。冒号本身引用矩阵行或列中所有元素,而关键字end引用最后一个行或列。因此,
sum(A(:,end))
>> sum(A(:,end))
ans =
34
可以计算A最后一列所有元素值之和
串联
串联就是连接小矩阵以便形成更大矩阵的过程。成对的方括号即为串联运算符。
B=[A A+32;A+48 A+16]
>> B=[A A+32;A+48 A+16]
B =
16 2 3 13 48 34 35 45
5 11 10 8 37 43 42 40
9 7 6 12 41 39 38 44
4 14 15 1 36 46 47 33
64 50 51 61 32 18 19 29
53 59 58 56 21 27 26 24
57 55 54 60 25 23 22 28
52 62 63 49 20 30 31 17
删除行和列
使用一对方括号即可从矩阵中删除行和列。例如删除第二列
X=A;
X(:,2)=[]
>> X(:,2)=[]
X =
16 3 13
5 10 8
9 6 12
4 15 1
使用X(1,2)=[]删除单个元素将使X不再是矩阵,将会导致错误。
而使用单一下标可以删除一个元素或多个元素,但这样会将剩余元素重构为一个行向量。
>> X(2:2:10)=[]
X =
16 9 3 6 13 12 1
标量扩展
通过标量扩展,会为范围中的索引分配一个指定标量。例如给1行到2行上2列到3列的元素置0
A(1:2,2:3)=0
>> A(1:2,2:3)=0
A =
16 0 0 13
5 0 0 8
9 7 6 12
4 14 15 1
逻辑下标
根据逻辑和运算创建的逻辑向量可用于引用子数组
NaN是用于缺少观测值的标记。可以使用逻辑索引删除缺少的数据,使用
isfinite(x)
①以小数形式显示:format rat
②以分数形式显示:format short
③以紧凑形式显示:format compact
④以松散形式显示:format loose
对于所有有限数值,返回true。无限数值返回false。
x = [2.1 1.7 1.6 1.5 NaN 1.9 1.8 1.5 5.1 1.8 1.4 2.2 1.6 1.8];
x=x(isfinite(x))
>> x=x(isfinite(x))
x =
列 1 至 9
2.1000 1.7000 1.6000 1.5000 1.9000 1.8000 1.5000 5.1000 1.8000
列 10 至 13
1.4000 2.2000 1.6000 1.8000
find函数
find函数可用于确定与指定逻辑条件相符的数组元素的索引。find以最简单的形式返回索引的列向量,转置该向量即得到获取索引的行向量,例如找到A中为质数的元素下标
A=magic(4);
k=find(isprime(A))'
>> k=find(isprime(A))'
k =
2 7 13
然后按k确定的顺序输出A中的质数并显示为行向量
A(k)
>> A(k)
ans =
5 7 13