我正在使用random.shuffle对2D numpy数组进行混洗。我遇到了以下问题:
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]]结果表明,在混洗一维数组时,一切都是正确的。但是,当对2D数组进行混洗时,结果变得奇怪。
为什么原始数组的第三行被丢弃,第一行被复制两次?
我知道可能有解决这个问题的方法,比如首先打乱一个表示行in的一维数组,然后按打乱in的顺序提取二维数组。但是我确实想弄清楚random.shuffle的实现发生了什么,或者我的代码出了什么问题。
发布于 2017-07-05 13:32:09
random模块中的Shuffle不是用来处理numpy数组的,因为它与嵌套的python列表并不完全相同。您应该改用numpy.random模块的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]]https://stackoverflow.com/questions/44917606
复制相似问题