如何在Matlab中更改向量中的顺序

时间:2014-03-28 14:13:56

标签: matlab vector

我有一个载体

H  =
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 0
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1
 1

我希望它像

      H= 0 1 0 1 0 1 0 1 0 1 0 1......

我尝试用H(:)但它不会工作,有17个零和16个可能是个问题吗?

4 个答案:

答案 0 :(得分:1)

如果您想要替代元素:

H2 = H;
H2([1:2:end,2:2:end])=H;

<强>解释

[1:2:end,2:2:end],只要H2与H的长度相同,就会创建一系列与矢量H长度相同的索引。如果您拨打2:2:endend (最后一个元素)是奇数,相当于2:2:(end-1),因此我们不必担心两次使用end元素。

对于你的矢量,它出现为[1,3,5...,33,2,4,6,...,32]

然后,对于H的每个元素,我们将它分配给由该索引向量表示的H2元素。也就是说,第二行告诉MATLAB我们想要H2(1) = H(1)H2(3) = H(2),等等。

答案 1 :(得分:0)

你走了:

V = H;
V(1:2:end) = H(1:ceil(end/2));
V(2:2:end) = H(ceil(end/2)+1:end);

应该适用于H的奇数和偶数长度。

当然,在这种特定情况下创建矢量的更简单方法是:

V = H*0;
V(2:2:end)=1

答案 2 :(得分:0)

如果您总是拥有偶数个元素,例如:

  

h = [0 0 0 0 0 1 1 1 1]';

那么这应该可以解决问题:

%// add 1 element to have an even number of values  
h(end+1) = NaN ;  
%// perform a reshape / transpose / reshape operation  
h2 = reshape( reshape(h,[],2)' , [] , 1 ) ;  %'
%// remove the last element  
h2(end) = [] ;  

答案 3 :(得分:-1)

你可以使用H * eye(H.lenght),但你需要知道矢量H的行数。