numpy 是什么阻止了np.random.shuffle重新 Shuffle 我的数组?

xxhby3vn  于 12个月前  发布在  其他
关注(0)|答案(2)|浏览(120)

当我重新排列这个数组时,它似乎保持不变。我错过了什么?我正在尝试创建一个由随机0和255组成的(6,4)数组:

import numpy as np
clr_values = [0,255]
ifslst = clr_values * 12
img_flat_sorted = np.array(ifslst)
img_2d_sorted = img_flat_sorted.reshape((6,4))
np.random.shuffle(img_2d_sorted)

img_2d_sorted似乎保持不变。我以为会是 Shuffle 。之前和之后一样。哪里出了问题?

array([[  0, 255,   0, 255],
       [  0, 255,   0, 255],
       [  0, 255,   0, 255],
       [  0, 255,   0, 255],
       [  0, 255,   0, 255],
       [  0, 255,   0, 255]])
lf3rwulv

lf3rwulv1#

它正在被 Shuffle ,但每一行都是一样的,它看起来没有变化。注意,数组只在第一维中进行混洗;即,在2D阵列中,其行被四处移动,但每行的内容保持原样。因为每一行都是[0, 255, 0, 255],所以如果它们改变了位置,你永远不会知道。
如果你想有相同数量的0255,但在随机位置,考虑 Shuffle 的1D数组,在reshape之前。

clr_values = [0,255]
ifslst = clr_values * 12
img_flat = np.array(ifslst)
np.random.shuffle(img_flat)
img_flat.reshape((6, 4))
# => array([[  0,   0, 255,   0],
#           [  0,   0, 255,   0],
#           [255, 255, 255, 255],
#           [  0, 255, 255, 255],
#           [255,   0, 255,   0],
#           [  0, 255,   0,   0]])
nhhxz33t

nhhxz33t2#

这里有一个基本的,未修改的函数来打乱2D数组中的所有值:

import numpy as np
from numpy.random import shuffle
def Shuffle2D(lst):
  for i in range(0, len(lst):
    lst[i] = shuffle(lst[i])
  return shuffle(lst)

这个简单的函数简单地打乱了2D数组中每一行的所有值。然后,它对整个数组进行额外的 Shuffle 。这应该工作 Shuffle 的图像像素。注意,这个函数并没有创建一个255和0的数组,但是你的代码看起来是正确的。

相关问题