이것은 나에게 버그처럼 보입니다. 원하는 시딩을 얻으려면 Matlab에서 rng()
을 두 번 호출해야합니다. 다음과 같은 실험을 고려해Matlab에서 rng()를 두 번 호출해야하는 이유
>> sd = rng(3) % THIS DOES NOT WORK
sd =
Type: 'twister'
Seed: 0
State: [625x1 uint32]
>> sd = rng(3) % BUT NOW IT DOES
sd =
Type: 'twister'
Seed: 3
State: [625x1 uint32]
>> sd = rng(3) % AND AGAIN, TO CONFIRM
sd =
Type: 'twister'
Seed: 3
State: [625x1 uint32]
>> sd = rng('shuffle') % BUT THIS FAILS
sd =
Type: 'twister'
Seed: 3
State: [625x1 uint32]
>> sd = rng('shuffle') % BUT ON THE SECOND GO IT WORKS
sd =
Type: 'twister'
Seed: 87326715
State: [625x1 uint32]
>> sd = rng('shuffle') % AND ON THE THIRD
sd =
Type: 'twister'
Seed: 87326802
State: [625x1 uint32]
>> sd = rng(4) % BUT AGAIN THIS FAILS
sd =
Type: 'twister'
Seed: 87326987
State: [625x1 uint32]
>> sd = rng(4) % BUT ON THE SECOND GO IT WORKS AGAIN
sd =
Type: 'twister'
Seed: 4
State: [625x1 uint32]
>> sd = rng(4) % AND SO ON
sd =
Type: 'twister'
Seed: 4
State: [625x1 uint32]
윽, 당신 말이 맞아. 또한 매우 예상치 못한 결과입니다.예를 들어,이 동작을 고려하십시오. 여기서'sd.Seed'는 3입니다 :'rng (3); sd = rng()'. 하지만 여기서'sd.Seed'는 이전 버전과 같을 것입니다.'sd = rng (3)' – Patrick
@Andrey, 개발자들이 당신의 답을 읽을 때 울음 소리가 들립니다. 'rng' 명령어는 RandStream 기능의 단순화로 소개되었는데, 사용자가 알지 못한다면 사용자가 난수 스트림 내부에 간섭하는 것을 막기 위해 의도적으로 약간의 묘한 ("mrg32k3a"가 무엇인가?)으로 설계되었습니다. 정확히 무엇을하고 있었는지. 그리고 여기 당신은'rng'은 혼란 스럽지만'RandStream'은 이해하기 쉽다고 말합니다. 당신에 대한 비판은 아닙니다. 그러나 당신의 기대와 디자인의 차이는 아이러니합니다. –
무엇? 그것은 글로벌 스트림에 대한 이상한 반대입니다. 만약 그것을 사용하기를 원치 않는다면, 전역 변수에 대한 일반적인 반대 때문이 아닐 것입니다. 또한 OP의 질문은 기본적으로 글로벌 스트림을 기반으로하는 'rng'에 관한 것입니다. – horchler