Tôi cần mẫu, không cần thay thế, trong số tất cả các số có thể có từ số range(n)
. Tức là, tôi có một tập hợp gồm (0,0), (0,1), ..., (0, n), (1,0), (1,1), ..., (1, n), ..., (n, 0), (n, 1), (n, n) và tôi đang cố gắng lấy mẫu k của các phần tử đó. Tôi hy vọng tránh việc xây dựng bộ sưu tập này một cách rõ ràng.python: lấy mẫu mà không cần thay thế từ lưới 2D
Tôi biết random.sample(range(n), k)
rất đơn giản và hiệu quả nếu tôi cần mẫu từ một chuỗi số thay vì số lượng các số.
Tất nhiên, tôi có thể xây dựng danh sách chứa tất cả các nhóm có thể (n * n = n^2
) một cách rõ ràng và sau đó gọi random.sample
. Nhưng điều đó có lẽ không hiệu quả nếu k
nhỏ hơn nhiều so với n^2
.
Tôi không chắc liệu mọi thứ có hoạt động giống nhau trong Python 2 và 3 về hiệu quả hay không; Tôi sử dụng Python 3.
tuples là trình tự, vì vậy câu của bạn "đang rất cần một mẫu từ một chuỗi các con số chứ không phải là các bộ số." không có ý nghĩa. Để bạn có nghĩa là bạn cần một mẫu từ một chuỗi các bộ dữ liệu? Nó không rõ ràng trong trường hợp đó làm thế nào các tuples nhìn. –
Mã của bạn ('random.sample (range (n), k)' hoạt động và đúng cho tất cả các chuỗi, tuples, danh sách, chuỗi và bất kỳ lớp con nào của 'collections.Sequence'. Bạn đã thử mã chưa? ? –
@Regebro: 'một mẫu từ tuples' = 'một mẫu của k tuples ra khỏi một chuỗi các tuples'. 'một mẫu từ một chuỗi' = 'một mẫu của k phần tử ra khỏi một chuỗi các phần tử n'. Tôi sẽ chỉnh sửa câu hỏi để làm rõ. @ S.Lott: ý tôi là tôi không thể tham chiếu đến một chuỗi ((0,0), (0,1), (0,2), (1,0), (1,1) , (1,2), (2,0), (2,1), (2,2)) là một 'phạm vi' đơn giản mà tôi có thể đơn giản áp dụng' mẫu'. – max