不好意思,昨天我有些地方弄错了。自己也是新手,多多见谅。当我昨天的话没说,一切以下面的说明为准。
indices(1,:)=ceil(t*rand(1,B)); 是给indices的第一行赋值
% Set up the random numbers
select=rand(t,B)<p; select是一个值为0或者1的t*B的矩阵。select(a,b)的值为1说明rand(a,b)的值小于p。
indices(select)=ceil(rand(1,sum(sum(select)))*t); 试试看我能不能把这句话说清楚。本质上这句话的作用是给indices矩阵(开始时除了第一行,其他的都是0)里某些位置的数据附上一个随机值。赋值数据的数量等同于select矩阵里1的个数,位置是select矩阵里1的位置。
接下来的循环给indices里其余的行赋值
for i=2:t
% Determine whether we stay (rand>p) or move to a new starting value
% (rand<p)
indices(i,~select(i,:))=indices(i-1,~select(i,:))+1; ~select(i,:)的作用是把 i 行里的0,和1的位置对换。比如说对换以后,i 行左起第3,4,6和7的值是1。那么这句语句的作用就是把indices矩阵 i 行上3,4,6和7上的数据的值变成i-1行上3,4,6和7的值+1,其余位置的数据不变。
end
indices(indices>t) = indices(indices>t)-t; 当indices所有的行都赋值好了以后,把里面所有大于t的数值减去t
% The indices make finding the bsdata simple
bsdata=data(indices); 矩阵运算还不是很熟悉,这句话看不懂。
|