需求
想要提取一个数组里的几个"不同部位"(被不像要的元素隔开)的元素组!删去不像要的元素太麻烦,如何仍用"索引的方法"一次提取想要的多个"间隔分布"的子数组/区间?
matlab实现
语法:a( [1:2 4:7 9:11] )
说明:索引()里面带一个[]大区间,一个大区间里可以放多个小区间,即实现多个小区间的同时索引!
需求示例:有一个[2 0 1 4 1 0 0 3 0 4 1 2 1 8 3 8 0 3 1]数组,我想提其中的[2 0 1 4 1 2 1 8 0 3 1]怎么办?
程序实现:
x = [2 0 1 4 1 0 0 3 0 4 1 2 1 8 3 8 0 3 1];
n = length(x);
b = x([1:4 11:14 17:n])
% 结果:
b =
2 0 1 4 1 2 1 8 0 3 1
用途拓展:循环时可以只对"想要改变的子区间"操作!
补充
对比2个语法:
- a(2:4)
- a([2:4])
两个的效果是完全一样的!也就是说,只选一个连续子区间时,直接用a(n:m)即可,不需要a([n:m])这样多一个中括号。但是:
- a(2:4, 5:8); % 报错
- a([2:4, 5:8]); % 正常√
所以:当只选1个连续子区间时,用一个小括号即可;当一次选多个子区间时,只能用本文提到的方法([])。