只是添加到@natan (+1) 的答案,运行以下代码:
%# Store the seed
Rng1 = rng;
%# Get a matrix of random numbers
X = rand(3, 3);
%# Restore the seed
rng(Rng1);
%# Get a matrix of random numbers one vector at a time
Y = nan(3, 3);
for n = 1:3
Y(:, n) = rand(3, 1);
end
%# Test for differences
if any(any(X - Y ~= 0)); disp('Error'); end;
X
您会注意到和之间没有区别Y
。也就是说,一步构建矩阵与从向量序列构建矩阵没有区别。
但是,我的代码和您的代码之间存在差异。注意我按列而不是行填充矩阵,因为当rand
用于一步构建矩阵时,它按列填充。顺便说一句,我不确定您是否意识到,但作为一般规则,您应该始终尝试对矩阵的列而不是行执行向量运算。前几天我在回答关于 SO 的问题时解释了原因;看到这里更多...
关于独立/依赖的问题,需要注意自己使用的语言。生成的数字序列rand
是完全依赖的。对于绝大多数统计测试,它们似乎是独立的——尽管如此,理论上,人们可以构建一个统计测试来证明由rand
.
最后想一想,如果你有一份 Greene 的“计量经济学分析”,他在第 17.2 节中对随机数生成进行了简洁的讨论。