[英]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:end
和end
(最后一个元素)是奇数,它等价于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.