python:为什么random.shuffle改变数组
python: why does random.shuffle change the array
我正在使用 random.shuffle
打乱二维 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]]
结果表明,对一维数组进行洗牌时,一切正确。但是在对二维数组进行洗牌时,结果变得很奇怪。
为什么原始数组的第三行被丢弃,而第一行被复制了两次?
我知道可以有解决方案来解决这个问题,例如首先打乱一个表示行 ID 的一维数组,然后按照打乱后的 ID 的顺序提取二维数组。但我确实想弄清楚 random.shuffle
的实现发生了什么,或者我的代码有什么问题。
来自 random
模块的 Shuffle 不是用来处理 numpy 数组的,因为它与嵌套的 python 列表不完全相同。您应该改用 numpy.random
module’s 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]]
我正在使用 random.shuffle
打乱二维 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]]
结果表明,对一维数组进行洗牌时,一切正确。但是在对二维数组进行洗牌时,结果变得很奇怪。
为什么原始数组的第三行被丢弃,而第一行被复制了两次?
我知道可以有解决方案来解决这个问题,例如首先打乱一个表示行 ID 的一维数组,然后按照打乱后的 ID 的顺序提取二维数组。但我确实想弄清楚 random.shuffle
的实现发生了什么,或者我的代码有什么问题。
来自 random
模块的 Shuffle 不是用来处理 numpy 数组的,因为它与嵌套的 python 列表不完全相同。您应该改用 numpy.random
module’s 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]]