一切都是数组
数组有一维,一般称之为向量;二维数组也就是矩阵 ...
一、一维向量
1. 一维向量的定义
如下产生一个列向量u
>> u= [1;2;3;4;5] //用分号分隔
u =
1
2
3
4
5
以下的几种方法等价的产生一个行向量v
>> v = [1,2,3,4,5]
v =
1 2 3 4 5
>> v = [1 2 3 4 5]
v =
1 2 3 4 5
>> v = [1:5]
v =
1 2 3 4 5
数组元素从1开始计数,最后一个可用end表示
>> v(3)
ans =
3
>> v(end)
ans =
5
2.数组转置 " .' "
>> v.'
ans =
1
2
3
4
5
当v定义好以后,将其规范化为行向量的命令:
>> v(1:end)
ans =
1 2 3 4 5
当v定义好以后,将其规范化为列向量的命令:
>> v(:)
ans =
1
2
3
4
5
3.冒号的用法
冒号“:”意味着等步长分隔,如
>> v = [1:5] //默认步长为1
v =
1 2 3 4 5
对比下面左右两个定义
>> w = [ 1 : 7] >> w = [ 1 : 2 : 7] //指定步长为2
w = w =
1 2 3 4 5 6 7 1 3 5 7
左边可以看作是当步长为1时,省略了对其的书写。如果要加入步长,注意其加入的位置!
>> v(1 : 2 : end) //意味着按步长为2, 输出v中的第一个到最后一个元素
ans =
1 3 5
顺便提一个函数:linspace(a , b , n)
其中a表示第一个元素,b为最后一个元素,一共n个元素。那么步长由系统自动计算生成。
>> linspace(1 , 20 , 5)
ans =
1.0000 5.7500 10.5000 15.2500 20.0000
二、矩阵
1.矩阵定义等
定义矩阵和定义向量大同小异,定义某矩阵A[3*3]:
>> A = [1 2 3 ; 4 5 6 ; 7 8 9] //不同的行用分号分隔,如同定义列向量一样
A =
1 2 3
4 5 6
7 8 9
>> A(2,2)
ans =
5
**2.取某行或列
取矩阵A的第2行 和 第3列,注意冒号的奇妙用法:
>> R2 = A(2 , :)
R2 =
4 5 6
>> C3 = A( : , 3)
C3 =
3
6
9
R2 = A(2 , :)相当于R2 = A(2 , 1:3),分号的作用有点类似通配符“*”
***3.使用向量作为矩阵的索引
>> E = A([1 2] , [3 1])
E =
3 1
6 4
这里
E(1,1)=A(1,3); E(1,2)=A(1,1);
E(2,1)=A(2,3); E(2,2)=A(2,1).
4.矩阵寻址A(D),D为一逻辑数组(由0/1组成),输出结果为一列向量,如下
>> D=logical([1 1 1; 0 1 1; 0 0 0])
D =
1 1 1
0 1 1
0 0 0
>> A(D)
ans =
1
2
5
3
6
5.用冒号表示数组的全部元素
之前就见识过通过冒号来完成取矩阵一行/列的操作,即冒号可以表示某向量中的所有元素。对于矩阵而言,其作用是一样的:
>> v1=A(:) //注意,结果并不是123456789
v1 =
1
4
7
2
5
8
3
6
9
事实上,MATLAB将每个数组都作为列向量来存储,不管它实际维数是多少。
在二维的矩阵中,数据的实际存储顺序为:将每列依次按顺序首尾相连成一个总的列向量,即上面所示的结果。