最直观的做法是使用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.';
Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐