我正在尝试创建一个单列向量(out
),它由一系列的1和0组成。这些应分别以B
和C
的长度集合出现,重复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]
如何更正这些循环以获得所需的输出?此外,有没有更好的方法来实现这一点与给定的输入?
非常感谢。
答案 0 :(得分:1)
1)您不需要使用length
,因为这会返回数组类型的长度,因此A,B,C都将是1的长度。
2)只需直接使用如下所示的值即可。您还可以使用空括号[]
3)如果您正在使用zeros
和ones
命令,则这些命令会生成整个数组/矩阵,而不需要处于循环中。如果您想保留自己的循环版本,请使用=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]);
我希望,这会解决你的问题。