请任何人帮我在一个32个元素的循环和数组的第一个条目中向右移动1个元素,每次获得新的兰特数+ 1,-1并将剩余的元素向右移动。 我正在这样做,但它没有正常工作
clc
clear all
near_input=zeros(1,32); %vector of 32 elements with all zeros
y=2*round(rand(1,1))-1; % random bernoulli sequence (+1,-1)
z=[y near_input(1:end-1)];
答案 0 :(得分:0)
我建议你一次插入所有号码,避免转移。你可以这样做:
z = 1-2*round(rand(1,32))
rand
的输入是行数和列数。因此,rand(1,32)
与将32 rand(1,1)
放在一起相同。并且为了记录,rand(1,1) == rand()
。
但是,如果确实按照您的方式执行,则需要进行一些更改。以下工作(但是代码真的很糟糕)。
near_input = zeros(1,32);
for ii = 1:numel(near_input)
y = 2*round(rand(1,1))-1;
near_input = [y, near_input(1:end-1)]
end
% z = near_input;
答案 1 :(得分:0)
您可以像这样生成整个序列:
y = sign(2*(rand(1, 32) - 0.5)); % 1x32 array of +-1's
或者,如果你坚持用“右推”(或者更确切地说是“连续左”)一个一个地创建它们:
y = [];
for unused = 1:32
y = [sign(rand() - 0.5), y];
end
其缺点是在循环中更改y
的大小(如果使用大型数组,则会出现真正的性能损失)。更好的方法是预先分配y
,并按索引分配:
y = zeros(1, 32);
for index = 32:-1:1
y(index) = sign(rand() - 0.5);
end
将索引从32向下运行到1,在放置时将值从右向左分配到y
。