你可以选择和使用一个 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