Làm cách nào để ngăn các số ngẫu nhiên lặp lại trong python?

Đối số đầu tiên mà phương thức nhận là một chuỗi và đối số thứ hai là số phần tử ngẫu nhiên được trả về

Phương thức

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

9 trả về một danh sách các phần tử có kích thước N được chọn từ chuỗi mà không cần thay thế

Không thay thế có nghĩa là cùng một phần tử không thể được trả lại nhiều lần

Lưu ý rằng phương pháp

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

9 tăng
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16 nếu chúng tôi cố gắng chọn nhiều phần tử hơn số phần tử có trong chuỗi

Chúng tôi đã cố gắng chọn 6 phần tử từ một chuỗi chỉ chứa 2 giá trị

Bạn có thể sử dụng câu lệnh

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

17 nếu cần xử lý lỗi

Mẫu lớn hơn dân số, do đó, một

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16 được nâng lên và sau đó được xử lý bởi khối
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

19

Nếu bạn sử dụng

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

90, bạn cũng có thể sử dụng phương pháp
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

91

Tạo danh sách các số ngẫu nhiên không trùng lặp bằng cách sử dụng numpy #

Để tạo danh sách các số ngẫu nhiên không trùng lặp

  1. Sử dụng lớp
    ans = struct with fields:
         Type: 'twister'
         Seed: 0
        State: [625x1 uint32]
    
    
    7 để tạo đối tượng
    ans = struct with fields:
         Type: 'twister'
         Seed: 0
        State: [625x1 uint32]
    
    
    1
  2. Sử dụng phương pháp
    ans = struct with fields:
         Type: 'twister'
         Seed: 600797869
        State: [625x1 uint32]
    
    
    94 để tạo danh sách các số không trùng lặp
  3. Đặt đối số
    ans = struct with fields:
         Type: 'twister'
         Seed: 600797869
        State: [625x1 uint32]
    
    
    95 thành
    ans = struct with fields:
         Type: 'twister'
         Seed: 600797869
        State: [625x1 uint32]
    
    
    96 để chọn các số duy nhất

các numpy. ngẫu nhiên. phương thức lựa chọn tạo ra một mẫu ngẫu nhiên từ đối tượng giống như mảng đã cho

Đối số

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

95 xác định liệu một giá trị của đối tượng giống như mảng có thể được chọn nhiều lần hay không. Đối số mặc định là
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

98

Chúng tôi đặt đối số

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

95 thành
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

96, vì vậy không có mục trùng lặp nào được chọn

Bạn có thể sử dụng phương thức tolist nếu bạn cần chuyển đổi mảng có nhiều mảng thành danh sách Python gốc

Ngoài ra, bạn có thể sử dụng phương pháp

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

91

Tạo danh sách các số ngẫu nhiên không trùng lặp bằng cách sử dụng ngẫu nhiên. xáo trộn() #

Để tạo danh sách các số không trùng lặp

  1. Sử dụng lớp
    ans = struct with fields:
         Type: 'twister'
         Seed: 0
        State: [625x1 uint32]
    
    
    7 để tạo đối tượng
    ans = struct with fields:
         Type: 'twister'
         Seed: 0
        State: [625x1 uint32]
    
    
    1
  2. Chuyển đổi đối tượng
    ans = struct with fields:
         Type: 'twister'
         Seed: 0
        State: [625x1 uint32]
    
    
    1 thành danh sách
  3. Sử dụng phương pháp
    ans = struct with fields:
         Type: 'twister'
         Seed: 600797869
        State: [625x1 uint32]
    
    
    91 để xáo trộn danh sách các số
  4. Sử dụng danh sách cắt để tạo danh sách các số ngẫu nhiên không trùng lặp

Chúng tôi đã sử dụng phương pháp

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

91 để xáo trộn danh sách các số

sự ngẫu nhiên. phương thức xáo trộn lấy một chuỗi và xáo trộn nó tại chỗ

Khi chúng tôi có danh sách các số duy nhất được xáo trộn, chúng tôi có thể sử dụng danh sách cắt danh sách để lấy danh sách N số ngẫu nhiên

Cú pháp để cắt danh sách là

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

97

Chỉ số

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

03 là bao gồm và chỉ số
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

04 là loại trừ (tối đa, nhưng không bao gồm)

Nếu bỏ chỉ mục

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

03 thì được coi là
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

06, nếu bỏ chỉ mục
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

04 thì lát cắt đi đến cuối danh sách

Các chỉ mục Python dựa trên số không, vì vậy mục đầu tiên trong danh sách có chỉ mục là

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

06 và mục cuối cùng có chỉ mục là
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

74 hoặc
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

75

Ví dụ này cho thấy cách sử dụng hàm

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7, cung cấp khả năng kiểm soát việc tạo số ngẫu nhiên

(Giả)Số ngẫu nhiên trong MATLAB® đến từ các hàm

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0. Nhiều chức năng khác gọi ba chức năng đó, nhưng đó là những khối xây dựng cơ bản. Cả ba đều phụ thuộc vào một trình tạo số ngẫu nhiên được chia sẻ duy nhất mà bạn có thể kiểm soát bằng cách sử dụng
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7

Điều quan trọng là phải nhận ra rằng các số "ngẫu nhiên" trong MATLAB hoàn toàn không thể đoán trước được mà được tạo bởi một thuật toán xác định. Thuật toán được thiết kế đủ phức tạp để đầu ra của nó có vẻ là một chuỗi ngẫu nhiên độc lập đối với người không biết thuật toán và có thể vượt qua các bài kiểm tra thống kê khác nhau về tính ngẫu nhiên. Hàm được giới thiệu ở đây cung cấp các cách để tận dụng tính tất định để

và để tận dụng tính ngẫu nhiên rõ ràng để chứng minh kết quả kết hợp từ các tính toán riêng biệt

"Bắt đầu lại"

Nếu bạn xem kết quả từ

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 hoặc
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0 trong một phiên MATLAB mới, bạn sẽ nhận thấy rằng chúng trả về cùng một dãy số mỗi khi bạn khởi động lại MATLAB. Thường rất hữu ích khi có thể đặt lại trình tạo số ngẫu nhiên về trạng thái khởi động đó mà không thực sự khởi động lại MATLAB. Ví dụ: bạn có thể muốn lặp lại một phép tính liên quan đến các số ngẫu nhiên và nhận được kết quả tương tự

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cung cấp một cách rất đơn giản để đưa trình tạo số ngẫu nhiên trở về cài đặt mặc định của nó

rng default
rand % returns the same value as at startup

Các cài đặt số ngẫu nhiên "mặc định" mà MATLAB khởi động hoặc

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

6 cung cấp cho bạn là gì?

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

Bạn sẽ thấy chi tiết hơn bên dưới cách sử dụng đầu ra ở trên, bao gồm trường

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

8, để kiểm soát và thay đổi cách MATLAB tạo các số ngẫu nhiên. Hiện tại, nó phục vụ như một cách để xem trình tạo
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0 hiện đang sử dụng

Không lặp lại

Mỗi lần bạn gọi

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 hoặc
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0, chúng sẽ rút ra một giá trị mới từ trình tạo số ngẫu nhiên được chia sẻ của chúng và các giá trị kế tiếp có thể được coi là độc lập về mặt thống kê. Nhưng như đã đề cập ở trên, mỗi khi bạn khởi động lại MATLAB, các chức năng đó được đặt lại và trả về cùng một dãy số. Rõ ràng, các phép tính sử dụng cùng các số "ngẫu nhiên" không thể được coi là độc lập về mặt thống kê. Vì vậy, khi cần kết hợp các tính toán được thực hiện trong hai hoặc nhiều phiên MATLAB như thể chúng độc lập về mặt thống kê, bạn không thể sử dụng cài đặt trình tạo mặc định

Một cách đơn giản để tránh lặp lại các số ngẫu nhiên giống nhau trong phiên MATLAB mới là chọn một nguồn gốc khác cho trình tạo số ngẫu nhiên.

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cung cấp cho bạn một cách dễ dàng để làm điều đó, bằng cách tạo một hạt giống dựa trên thời gian hiện tại

Mỗi lần bạn sử dụng

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16, nó sẽ khởi động lại trình tạo bằng một hạt giống khác. Bạn có thể gọi
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 mà không cần đầu vào để xem nó thực sự sử dụng hạt giống nào

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

1

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

5

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16 là một cách rất dễ dàng để tạo lại trình tạo số ngẫu nhiên. Bạn có thể nghĩ rằng sử dụng nó để có được tính ngẫu nhiên "đúng" trong MATLAB là một ý kiến ​​hay, hoặc thậm chí là cần thiết. Tuy nhiên, đối với hầu hết các mục đích, không nhất thiết phải sử dụng
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16. Chọn một hạt giống dựa trên thời gian hiện tại không cải thiện các thuộc tính thống kê của các giá trị bạn sẽ nhận được từ
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0 và không làm cho chúng trở nên "ngẫu nhiên hơn" theo bất kỳ ý nghĩa thực tế nào. Mặc dù việc đặt lại trình tạo mỗi khi bạn khởi động MATLAB hoặc trước khi bạn chạy một số phép tính lớn liên quan đến các số ngẫu nhiên là hoàn toàn tốt, nhưng thực sự không nên đặt lại trình tạo quá thường xuyên trong một phiên, vì điều này có thể ảnh hưởng đến

Điều mà

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16 cung cấp là một cách để tránh lặp lại các chuỗi giá trị giống nhau. Đôi khi điều đó rất quan trọng, đôi khi nó chỉ là "tốt đẹp", nhưng thường thì điều đó không quan trọng chút nào. Hãy nhớ rằng nếu bạn sử dụng
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16, bạn có thể muốn lưu hạt giống mà
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 đã tạo để sau này bạn có thể lặp lại các phép tính của mình. Bạn sẽ thấy làm thế nào để làm điều đó dưới đây

Kiểm soát nhiều hơn khả năng lặp lại và không lặp lại

Cho đến giờ, bạn đã biết cách đặt lại bộ tạo số ngẫu nhiên về cài đặt mặc định của nó và gieo lại nó bằng cách sử dụng hạt giống được tạo theo thời gian hiện tại.

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cũng cung cấp một cách để gieo lại nó bằng cách sử dụng một hạt giống cụ thể

Bạn có thể sử dụng cùng một hạt giống nhiều lần để lặp lại các phép tính tương tự. Ví dụ: nếu bạn chạy mã này hai lần

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

5

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

6

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

6

bạn nhận được kết quả chính xác như nhau. Bạn có thể làm điều này để tạo lại

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

57 sau khi đã xóa nó, để bạn có thể lặp lại những gì xảy ra trong các phép tính tiếp theo phụ thuộc vào
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

57, sử dụng các giá trị cụ thể đó

Mặt khác, bạn có thể muốn chọn các hạt giống khác nhau để đảm bảo rằng bạn không lặp lại các phép tính giống nhau. Ví dụ: nếu bạn chạy mã này trong một phiên MATLAB

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

0

và mã này trong một mã khác

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

1

bạn có thể kết hợp hai kết quả và tự tin rằng chúng không đơn giản là những kết quả giống nhau được lặp lại hai lần

Như với

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

16, có một lưu ý khi sắp xếp lại trình tạo số ngẫu nhiên của MATLAB, vì nó ảnh hưởng đến tất cả đầu ra tiếp theo từ
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0. Trừ khi bạn cần tính lặp lại hoặc tính duy nhất, thông thường chỉ nên tạo các giá trị ngẫu nhiên mà không cần cài đặt lại trình tạo. Nếu bạn cần phải khởi động lại trình tạo, điều đó thường được thực hiện tốt nhất tại dòng lệnh hoặc tại một vị trí trong mã của bạn không dễ bị bỏ qua

Chọn loại máy phát điện

Bạn không chỉ có thể đặt lại trình tạo số ngẫu nhiên như hình trên, mà còn có thể chọn loại trình tạo số ngẫu nhiên mà bạn muốn sử dụng. Các loại trình tạo khác nhau tạo ra các chuỗi số ngẫu nhiên khác nhau và ví dụ: bạn có thể chọn một loại cụ thể vì các thuộc tính thống kê của nó. Hoặc bạn có thể cần tạo lại kết quả từ phiên bản MATLAB cũ hơn đã sử dụng loại trình tạo mặc định khác

Một lý do phổ biến khác để chọn loại trình tạo là bạn đang viết bài kiểm tra xác thực tạo dữ liệu đầu vào "ngẫu nhiên" và bạn cần đảm bảo rằng bài kiểm tra của bạn luôn có thể mong đợi chính xác cùng một kết quả có thể dự đoán được. Nếu bạn gọi

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 bằng một hạt giống trước khi tạo dữ liệu đầu vào, nó sẽ đặt lại bộ tạo số ngẫu nhiên. Nhưng nếu loại trình tạo đã bị thay đổi vì một lý do nào đó, thì đầu ra từ
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0 sẽ không như bạn mong đợi từ hạt giống đó. Do đó, để chắc chắn 100% về độ lặp lại, bạn cũng có thể chỉ định loại trình tạo

Ví dụ,

làm cho

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 và
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0 sử dụng thuật toán tạo Mersenne Twister, sau khi gieo nó bằng 0

Sử dụng

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

60

chọn thuật toán trình tạo đệ quy kết hợp, hỗ trợ một số tính năng song song mà Mersenne Twister không có

lệnh này

chọn thuật toán tạo mặc định trong MATLAB 4. 0

Và tất nhiên, lệnh này sẽ trả về trình tạo số ngẫu nhiên về cài đặt mặc định của nó

Tuy nhiên, vì cài đặt trình tạo số ngẫu nhiên mặc định có thể thay đổi giữa các lần phát hành MATLAB, nên việc sử dụng

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

61 không đảm bảo kết quả có thể dự đoán được trong thời gian dài.
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

61 là một cách thuận tiện để đặt lại trình tạo số ngẫu nhiên, nhưng để có thể dự đoán được nhiều hơn, hãy chỉ định loại trình tạo và hạt giống

Mặt khác, khi bạn đang làm việc tương tác và cần tính lặp lại, sẽ đơn giản hơn và thường là đủ để gọi

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 chỉ bằng một hạt giống

Lưu và khôi phục cài đặt trình tạo số ngẫu nhiên

Gọi

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 không có đầu vào trả về cấu trúc vô hướng với các trường chứa hai mẩu thông tin đã được mô tả. loại trình tạo và số nguyên mà trình tạo được đặt lại lần cuối

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

0

Trường thứ ba,

ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

8, chứa một bản sao của vectơ trạng thái hiện tại của trình tạo. Vectơ trạng thái này là thông tin mà trình tạo duy trì bên trong để tạo giá trị tiếp theo trong chuỗi số ngẫu nhiên của nó. Mỗi lần bạn gọi
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

8,
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

9 hoặc
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

0, trình tạo mà chúng chia sẻ sẽ cập nhật trạng thái bên trong của nó. Do đó, vectơ trạng thái trong cấu trúc cài đặt được trả về bởi
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 chứa thông tin cần thiết để lặp lại trình tự, bắt đầu từ điểm mà trạng thái được ghi lại

Mặc dù chỉ có thể thấy đầu ra này là thông tin, nhưng

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cũng chấp nhận cấu trúc cài đặt làm đầu vào, để bạn có thể lưu cài đặt, bao gồm vectơ trạng thái và khôi phục chúng sau này để lặp lại phép tính. Vì các cài đặt chứa loại trình tạo, nên bạn sẽ biết chính xác những gì bạn đang nhận được và do đó, "sau này" có thể có nghĩa là bất kỳ điều gì từ những khoảnh khắc sau đó trong cùng một phiên MATLAB, cho đến nhiều năm (và nhiều bản phát hành MATLAB) sau này. Bạn có thể lặp lại kết quả từ bất kỳ điểm nào trong chuỗi số ngẫu nhiên mà bạn đã lưu cài đặt trình tạo. Ví dụ

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

1

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

2

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

3

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

2

Lưu ý rằng trong khi việc gieo lại chỉ cung cấp quá trình khởi tạo lại thô, thì việc lưu và khôi phục trạng thái trình tạo bằng cách sử dụng cấu trúc cài đặt cho phép bạn lặp lại bất kỳ phần nào của chuỗi số ngẫu nhiên

Cách phổ biến nhất để sử dụng cấu trúc cài đặt là khôi phục trạng thái trình tạo. Tuy nhiên, vì cấu trúc không chỉ chứa trạng thái mà còn chứa loại trình tạo và hạt giống, đây cũng là một cách thuận tiện để chuyển đổi tạm thời các loại trình tạo. Ví dụ: nếu bạn cần tạo giá trị bằng một trong các trình tạo kế thừa từ MATLAB 5. 0, bạn có thể lưu cài đặt hiện tại đồng thời chuyển sang sử dụng trình tạo cũ

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

5

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

6

rồi khôi phục cài đặt gốc sau

Bạn không nên sửa đổi nội dung của bất kỳ trường nào trong cấu trúc cài đặt. Cụ thể, bạn không nên xây dựng vectơ trạng thái của riêng mình hoặc thậm chí phụ thuộc vào định dạng của trạng thái trình tạo

Viết code đơn giản hơn, linh hoạt hơn

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cho phép bạn hoặc

  • đặt lại trình tạo số ngẫu nhiên, hoặc

  • lưu và khôi phục cài đặt trình tạo số ngẫu nhiên

mà không cần biết nó là loại gì. Bạn cũng có thể trả trình tạo số ngẫu nhiên về cài đặt mặc định mà không cần biết các cài đặt đó là gì. Mặc dù có những tình huống bạn có thể muốn chỉ định loại trình tạo, nhưng

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 mang đến cho bạn sự đơn giản khi không phải chỉ định nó

Nếu bạn có thể tránh chỉ định loại trình tạo, mã của bạn sẽ tự động thích ứng với các trường hợp cần sử dụng trình tạo khác và sẽ tự động được hưởng lợi từ các thuộc tính được cải thiện trong loại trình tạo số ngẫu nhiên mặc định mới

ans = struct with fields: Type: 'twister' Seed: 0 State: [625x1 uint32] 7 và ans = struct with fields: Type: 'twister' Seed: 600797869 State: [625x1 uint32] 64

ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cung cấp một cách thuận tiện để kiểm soát việc tạo số ngẫu nhiên trong MATLAB cho các nhu cầu phổ biến nhất. Tuy nhiên, các tình huống phức tạp hơn liên quan đến nhiều luồng số ngẫu nhiên và tạo số ngẫu nhiên song song yêu cầu một công cụ phức tạp hơn. Lớp
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

64 là công cụ đó và nó cung cấp cách hiệu quả nhất để kiểm soát việc tạo số ngẫu nhiên. Hai công cụ bổ sung cho nhau, với
ans = struct with fields:
     Type: 'twister'
     Seed: 0
    State: [625x1 uint32]

7 cung cấp cú pháp ngắn gọn và đơn giản hơn nhiều, được xây dựng dựa trên tính linh hoạt của
ans = struct with fields:
     Type: 'twister'
     Seed: 600797869
    State: [625x1 uint32]

64