python:为什么random.shuffle会更改数组

pfc*_*pfc 5 python arrays numpy shuffle

我正在使用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]]
Run Code Online (Sandbox Code Playgroud)

结果表明,当改组一维数组时,一切都是正确的.但是在改组2D阵列时,结果变得奇怪.

为什么抛弃原始数组的第三行并将第一行重复两次?

我知道可以有解决方案来解决这个问题,例如首先洗牌指示行ID的一维数组,然后按照混洗ID的顺序提取二维数组.但我确实希望弄清楚random.shuffle我的代码的实现或错误会发生什么.

abc*_*ccd 8

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]]
Run Code Online (Sandbox Code Playgroud)