你可以选择和使用一个 MATLAB 函数的子集,好像他们是独立的数组一样。在数组名后面加括号,括号里面是所有要选择的元素的下标,这样就能选择这个函数的子集了。例如,假设定义了一个数组
arr1
如下
arr1=[1.1 -2.2 3.3 -4.4 5.5]
那么 arr1(3)
为
3.3,arr1([1 4])
为数组
[1.1 -4.4],arr1(1:2:5)
为数组[1.1 3.3 5.5]. 对于一个二维数组,克隆运算符可以用于下标来选择子数组。例如,假设
arr2=[1 2 3; -2 -3 -4;3 4 5]
将建立一个数组
在这种定义下,子数组 arr2(1,:)为[1 2 3],子数组 arr2(:,1:2:3)为
1 end 函数
MATLAB中有一个特殊的函数叫做
end
函数
,
对于创建子数组的下标非常的有用
.当用到一个函数的下标时
,end
函数将会返回下标的最大值. 例如
,
假设数组
arr3
定义如下
:
arr3=[1 2 3 4 5 6 7 8];
那么 arr3(5:end)
将会产生数组
[5 6 7 8],arr3(end)
将会产生值 8. end
函数返回的值一般为所要下标的最大值
.
如果
end
函数显示有不同的下标
,那它将在一个表达式内返回不同的值
.
例如
,
假设一个
3
×
4
数组
arr4
的定义如下
:
arr4=[1 2 3 4;5 6 7 8;9 10 11 12]
那么表达式arr4(2:end,2:end)将会返回
注意第一个end
返回值为
3,第二个返回值为
4.
2 子数组在左边的赋值语句的使用
只要数组的形(行数和列数)和子数组的形相匹配,把子数组放于赋值语句的左边用来更新数组中的值。如果形不匹配,那么将会有错误产生。例如,下面有一个 3
×
4 数组定义如下:
>> arr4=[1 2 3 4;5 6 7 8;9 10 11 12]
arr4 =
1 2 3 4
5 6 7 8
9 10 11 12
因为在等号左边的表达式的形(2
×
2
)与
a
相匹配,那么下面的这个赋值语句是合法的。
>> arr4(1:2,[1 4])=[20 21;22 23]
arr4 =
20 2 3 21
22 6 7 23
9 10 11 12
注意数组元素(1
,
1
),(
1
,
4)(2
,
1)和(2
,
4)得到了更新。相对而言,两边的形不相匹配,则表达式是非法的,例如下面这个表达式。
>> arr5(1:2,[1 4])=[20 21]
??? Subscripted assignment dimension mismatch.
常见编程错误
对于涉及子数组的赋值语句,等号两边的形必须相匹配。否则将会产生错误。
在 MATLAB 中用子数组赋值和用值直接赋值有很大的不同。如果用子数组赋值,那么只有相应的值得到更新,而其他的值保持不变。另一方面,直接赋值,则数组的原有内容全部删除并被新的值替代。例如,假设用一个数组 arr4
定义如下:
>> arr4=[1 2 3 4;5 6 7 8;9 10 11 12]
arr4 =
1 2 3 4
5 6 7 8
9 10 11 12
下面的赋值语句,只更新特定的元素:
>> arr4(1:2,[1 4])=[20 21;22 23]
arr4 =
20 2 3 21
22 6 7 23
9 10 11 12
相对地,下面的赋值语句更新了数组的全部内容,并改变了数组的形
>> arr4=[20 21;22 23]
arr4 =
20 21
22 23
好的编程习惯
确保将赋值于子数组和赋值于数组。
MATLAB
将它们当作两个不同的情况来对待。
3 用一标量来给子数组赋值
位于赋值语句的右边的标量值总是能匹配左边数组的形。这个标量值将会被复制到左边语句中所对应的元素。例如,假设用一个数组
arr4
定义如下:
arr4=[1 2 3 4;5 6 7 8;9 10 11 12]
下面的表达式将一个值赋值于数组的 4
个元素。
>> arr4(1:2,1:2)=1
arr4 =
1 1 3 4
1 1 7 8
9 10 11 12