我有一个载体
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个可能是个问题吗?
答案 0 :(得分: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)
,等等。
答案 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的行数。