【问题标题】:python: why does random.shuffle change the arraypython:为什么 random.shuffle 改变数组
【发布时间】:2017-07-05 05:25:34
【问题描述】:

我正在使用 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]]

结果表明,当洗牌一维数组时,一切都是正确的。但是在改组二维数组时,结果变得很奇怪。

为什么原来数组的第三行被丢掉,第一行重复了两次?

我知道有解决这个问题的解决方案,例如首先打乱一个指示行 ID 的一维数组,然后按照打乱的 ID 的顺序提取二维数组。但我确实想弄清楚random.shuffle 的实现会发生什么,或者我的代码有什么问题。

【问题讨论】:

  • 这浪费了我很多时间,我花了 1 周的时间才发现 random.shuffle 在这种情况下不起作用。

标签: python arrays numpy shuffle


【解决方案1】:

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]]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-07-13
    • 2018-01-10
    • 2020-10-27
    • 2018-08-30
    • 2011-01-08
    • 2011-05-12
    • 2021-03-10
    相关资源
    最近更新 更多