新的随机条目和移位

时间:2014-03-09 09:36:11

标签: matlab

请任何人帮我在一个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)];   

2 个答案:

答案 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