繁体   English   中英

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

[英]how can I change order in vectors in Matlab

我有一个向量

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 个 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) ,依此类推。

干得好:

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

如果您始终拥有偶数个元素,例如在您的示例中:

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) = [] ;  

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM