Vấn đề là danh sách các bộ dữ liệu được hiểu là một mảng 2D, trong khi choice
chỉ hoạt động với 1D-mảng hoặc số nguyên (được hiểu là "chọn từ phạm vi"). Xem the documentation.
Vì vậy, một cách để khắc phục điều này là vượt qua len
trong danh sách bộ dữ liệu, sau đó chọn các phần tử có chỉ mục tương ứng (hoặc chỉ mục), như được mô tả trong other answer. Nếu bạn bật lista_elegir
thành một số np.array
trước, điều này cũng sẽ hoạt động đối với nhiều chỉ mục. Tuy nhiên, có thêm hai vấn đề:
Thứ nhất, theo cách bạn gọi hàm, probabilit
sẽ được hiểu là tham số thứ ba, replace
, không như xác suất, tức là danh sách được hiểu như là một boolean , có nghĩa là bạn chọn thay thế, nhưng xác suất thực tế bị bỏ qua. Bạn có thể dễ dàng kiểm tra điều này bằng cách chuyển tham số thứ ba là [1, 0, 0]
. Sử dụng p=probabilit
để thay thế. Thứ hai, xác suất phải tổng hợp lên 1, chính xác. Bạn chỉ có 0.999
. Có vẻ như bạn sẽ phải nghiêng các xác suất một cách nhẹ nhàng, hoặc chỉ để lại tham số đó là None
nếu chúng giống nhau (do đó giả định phân bố đều).
>>> probabilit = [0.333, 0.333, 0.333]
>>> lista_elegir = np.array([(3, 3), (3, 4), (3, 5)]) # for multiple indices
>>> indices = np.random.choice(len(lista_elegir), 2, p=probabilit if len(set(probabilit)) > 1 else None)
>>> lista_elegir[indices]
array([[3, 4],
[3, 5]])
Nguồn
2015-06-13 18:36:08
Nếu bạn chỉ muốn vẽ các phần tử có xác suất bằng nhau, bạn có thể sử dụng 'random.choice' từ lib chuẩn. – cel
Tôi có phiên bản không rõ ràng nên tôi không thể kiểm tra, nhưng theo [tài liệu] (http://docs.scipy.org/doc/numpy/reference/generated/numpy.random.choice.html#numpy.random .choice), bạn đã thử tạo danh sách một mảng 'numpy 'chưa? Ngoài ra, có vẻ như bạn đang thiếu tham số thứ ba 'replace'. –