最直观的做法是使用for循环,然后用 2n 和 2n+1 区分,但既然是matlab,就要发挥它处理数组的优势。
首先新建一个数组,为了更直观,就用如下这个:
[1;2;3;4;5;6;7;8;9;10]
ans =
1
2
3
4
5
6
7
8
9
10
行向量和列向量差不了太多,这里用的是列向量。
reshape([1;2;3;4;5;6;7;8;9;10],2,5)
ans =
1 3 5 7 9
2 4 6 8 10
这里需要注意reshape要求后面两个参数相乘的结果和原数组元素数目是一样的,即:2*5=10
由于奇偶分离之前的向量是列的,分离之后也把它置成列的会比较好(看起来顺眼),就是个转置的事情罢了。
完整代码:
case1 = reshape([1;2;3;4;5;6;7;8;9;10],2,5);
case1.'
ans =
1 2
3 4
5 6
7 8
9 10
大成功!
我当时想着可不可以换一下,就有了下面这个代码:
case2 = reshape([1;2;3;4;5;6;7;8;9;10],5,2)
case2.'
case2 =
1 6
2 7
3 8
4 9
5 10
ans =
1 2 3 4 5
6 7 8 9 10
后来想清楚了,奇偶分离就要求了2个2个分开,所以reshape的第二个参数必定是2。
如果要推广到一般数组的话,也可以。
% 要求将一维列数组seqQ的第奇数个元素和第偶数个元素分离
% 已知条件:seqQ
% 所求数组:seqFinal(列
seqLen = length(seqQ);
seqTemp = reshape(seqQ,2,seqLen/2);
seqFinal = seqTemp.';