Bạn đã thực hiện nhiều quan sát đúng rồi!
Trừ khi bạn muốn gieo cả hai trình tạo ngẫu nhiên, nếu không, về lâu dài, việc chọn một trình tạo này hay trình phát khác có thể đơn giản hơn. Nhưng nếu bạn cần sử dụng cả hai, thì có, bạn cũng sẽ cần gieo cả hai, vì chúng tạo ra các số ngẫu nhiên độc lập với nhau.
Đối với numpy.random.seed()
, khó khăn chính là nó không an toàn theo luồng - nghĩa là không an toàn khi sử dụng nếu bạn có nhiều luồng thực thi khác nhau , vì nó không được đảm bảo hoạt động nếu hai luồng khác nhau đang thực thi chức năng cùng một lúc. Nếu bạn không sử dụng các chuỗi và nếu bạn có thể mong đợi một cách hợp lý rằng bạn sẽ không cần phải viết lại chương trình của mình theo cách này trong tương lai, numpy.random.seed()
thì không sao cả. Nếu có bất kỳ lý do gì để nghi ngờ rằng bạn có thể cần các luồng trong tương lai, thì về lâu dài sẽ an toàn hơn nhiều nếu làm theo đề xuất và tạo một phiên bản cục bộ của numpy.random.Random
lớp . Theo như tôi có thể nói, random.random.seed()
là một chuỗi an toàn (hoặc ít nhất, tôi không tìm thấy bất kỳ bằng chứng nào cho điều ngược lại).
Các numpy.random
thư viện chứa một vài phân phối thêm khả năng thường được sử dụng trong nghiên cứu khoa học, cũng như một vài chức năng thuận tiện cho việc tạo ra các mảng dữ liệu ngẫu nhiên. Các random.random
thư viện là một chút nhẹ hơn, và nên sử dụng tốt nếu bạn không làm nghiên cứu khoa học hoặc các loại công việc trong thống kê.
Mặt khác, cả hai đều sử dụng trình tự xoắn Mersenne để tạo ra các số ngẫu nhiên của chúng và cả hai đều hoàn toàn xác định - nghĩa là, nếu bạn biết một vài thông tin quan trọng, bạn có thể dự đoán một cách chắc chắn tuyệt đối con số nào sẽ đến tiếp theo . Vì lý do này, cả numpy.random và random.random đều không phù hợp cho bất kỳ mục đích sử dụng mật mã nghiêm trọng nào . Nhưng vì trình tự rất dài, nên cả hai đều phù hợp để tạo số ngẫu nhiên trong trường hợp bạn không lo lắng về việc mọi người đang cố gắng thiết kế ngược dữ liệu của bạn. Đây cũng là lý do cần thiết phải gieo giá trị ngẫu nhiên - nếu bạn bắt đầu ở cùng một nơi mỗi lần, bạn sẽ luôn nhận được cùng một chuỗi các số ngẫu nhiên!
Là một mặt lưu ý, nếu bạn làm cần độ mật mã ngẫu nhiên, bạn nên sử dụng bí mật module, hoặc một cái gì đó giống như Crypto.Random nếu bạn đang sử dụng một phiên bản Python sớm hơn so với Python 3.6.
random.random
. Bạn thường không cần cái này.