2017-07-05 16 views
5

Tôi đang sử dụng random.shuffle để phát ngẫu nhiên mảng 2D numpy. Tôi đã gặp vấn đề sau:python: tại sao random.shuffle thay đổi mảng

import numpy as np 
from random import shuffle as sf 

b = np.array([1,2,3,4,5]) 
print b 
# [1 2 3 4 5] 
sf(b) 
print b 
# [1 4 5 3 2] 

a = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
print a 
# [[1 2 3] 
# [4 5 6] 
# [7 8 9]] 
sf(a) 
print a 
# [[1 2 3] 
# [4 5 6] 
# [1 2 3]] 

Kết quả cho thấy khi xáo trộn mảng 1D, mọi thứ đều chính xác. Nhưng trong khi xáo trộn mảng 2D, kết quả trở nên lạ lùng.

Tại sao hàng thứ ba của mảng ban đầu bị bỏ đi và hàng đầu tiên được nhân đôi hai lần?

Tôi biết có thể có giải pháp để giải quyết vấn đề này, chẳng hạn như trước tiên trộn một mảng 1D cho biết các id hàng và sau đó trích xuất mảng 2D theo thứ tự các id xáo trộn. Nhưng tôi muốn nêu rõ điều gì xảy ra với việc triển khai random.shuffle hoặc mã của tôi có vấn đề gì.

+0

Điều này đã lãng phí rất nhiều thời gian của tôi và tôi mất 1 tuần để tìm ra ngẫu nhiên.shuffle không hoạt động trong những trường hợp như vậy. – Blackberry

Trả lời

8

Phát ngẫu nhiên từ mô-đun random không được thực hiện để xử lý các mảng có nhiều mảng vì nó không chính xác giống như danh sách con trăn lồng nhau. Thay vào đó, bạn nên sử dụng numpy.random mô-đun của shuffle.

import numpy as np 
from numpy.random import shuffle 

arr = np.array([[1,2,3],[4,5,6],[7,8,9]]) 
shuffle(arr) 
print(arr) 
# output: 
# [[4 5 6] 
# [1 2 3] 
# [7 8 9]] 
+3

Liên quan: https://github.com/numpy/numpy/issues/1655 –

Các vấn đề liên quan