You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Matlab中rng()函数在循环中的行为差异及原因咨询

为什么Matlab中rng位置不同,randn结果有差异?

核心原因很直接:rng(1,'philox')每次调用都会把随机数生成器重置到种子1的初始状态,两种场景的执行逻辑完全不一样:

场景1:rng放在循环内

for i = 1:2
rng(1,'philox');
disp(randn(2,1)); % 两次输出都是0.0906, -0.7327
end

每次循环启动时,rng(1,'philox')都会把生成器打回种子1的起始位置,随后调用randn(2,1)都是从这个起始点取序列的前2个随机数。相当于反复读同一段序列,所以两次输出完全重复。

场景2:rng放在循环外

rng(1,'philox');
for i = 1:2
disp(randn(2,1)); % 第一次0.7565,-0.7096;第二次是序列的下两个数
end

只在最开始执行一次rng(1,'philox'),生成器处于起始状态:

  • 第一次循环:randn(2,1)取序列的第1、2个数,生成器状态前进到第3个位置
  • 第二次循环:randn(2,1)接着取序列的第3、4个数,所以输出和第一次不同

你说的“种子1对应相同的随机数序列”没错,但生成器的状态是随随机数调用逐步推进的。循环内的重置操作打断了这个推进过程,强制每次都从头开始取数,这才是结果差异的本质。

如果要验证,直接调用randn(4,1)会得到:

0.7565
-0.7096
[第二次循环的两个数]

和场景2两次循环的输出完全对应,也能证明序列是连续的。

内容的提问来源于stack exchange,提问作者Usingless

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.13 11:33:48