MATLAB - 使用循环创建重复的1和0序列

时间:2016-02-29 22:19:18

标签: matlab for-loop

我正在尝试创建一个单列向量(out),它由一系列的1和0组成。这些应分别以BC的长度集合出现,重复A次。例如:

out=[1
     0
     0
     1
     0
     0
     1
     0
     0]

目前设置为:

out=[0];  %not ideal, but used to initially define 'out'
A=3;
B=1;
C=2;

for i = 1:length(A)

    for ii = 1:length(B)
        out(end+1,1) = ones(ii,1);
    end

    for iii = 1:length(C)
        out(end+1,1) = zeros(iii,1);
    end

end

这不起作用 - 电流输出:

out=[0
     1
     0]

如何更正这些循环以获得所需的输出?此外,有没有更好的方法来实现这一点与给定的输入?

非常感谢。

3 个答案:

答案 0 :(得分:1)

1)您不需要使用length,因为这会返回数组类型的长度,因此A,B,C都将是1的长度。

2)只需直接使用如下所示的值即可。您还可以使用空括号[]

初始化空数组

3)如果您正在使用zerosones命令,则这些命令会生成整个数组/矩阵,而不需要处于循环中。如果您想保留自己的循环版本,请使用=1=0

out=[];  %--> you can use this instead
A=3;
B=1;
C=2;

for i = 1:A
    out(end+1:end+B,1) = ones(B,1);
    out(end+1:end+C,1) = zeros(C,1);    
end

...当然还有更多" Matlaby"只是做大卫在评论repmat([ones(B,1);zeros(C,1)],A,1)中所说的话,但上面的内容可以帮助你。

答案 1 :(得分:1)

一些模运算怎么样?

result = double(mod(0:(B+C)*A-1, B+C)<B).';

示例:

>> B = 2; %// number of ones in each period
>> C = 4; %// number of zeros in each period
>> A = 3; %// number of periods
>> result = double(mod(0:(B+C)*A-1, B+C)<B).'
result =
     1
     1
     0
     0
     0
     0
     1
     1
     0
     0
     0
     0
     1
     1
     0
     0
     0
     0

答案 2 :(得分:0)

我可以建议两种方式: a)使用for循环 -

A=3;
B=2;
C=3;
OneVector=ones(1,B);   % B is the length of ones.
zeroVector=zeros(1,C); % C is the length of zeros.

combinedVector=cat(2,OneVector,zeroVector);

Warehouse=[];  % to save data
for(i=1:A)
Warehouse=cat(2,Warehouse,combinedVector);
end

b)使用repmat:

OneVector=ones(1,B);   % B is the length of ones.
zeroVector=zeros(1,C); % C is the length of zeros.
combinedVector=cat(2,OneVector,zeroVector);
Warehouse=repmat(combinedVector, [A,1]);

我希望,这会解决你的问题。