为何np.random.shuffle无法打乱我的NumPy二维数组?
问题原因
np.random.shuffle()的作用限制:该函数仅会打乱数组的第一维度(行),但你生成的数组每一行都是[0, 255, 0, 255],所有行内容完全一致,因此打乱行后视觉上无变化。- 数组生成逻辑未实现随机:你通过
clr_values * 12生成的是严格交替的0,255,0,255,...序列,reshape为(6,4)后每行都是固定模式,完全没有随机分布的0和255。
解决方案
方法1:直接生成随机数组(推荐)
一步生成符合需求的(6,4)随机数组:
import numpy as np img_random = np.random.choice([0, 255], size=(6, 4)) print(img_random)
方法2:打乱已有数组的所有元素
若需打乱现有一维序列的所有元素后再转为二维:
import numpy as np clr_values = [0,255] ifslst = clr_values * 12 img_flat_sorted = np.array(ifslst) # 打乱一维数组的元素顺序 np.random.shuffle(img_flat_sorted) # 重塑为二维数组 img_2d_shuffled = img_flat_sorted.reshape((6,4)) print(img_2d_shuffled)
方法3:打乱二维数组的全部元素
也可通过展平后打乱再重塑的方式,直接打乱二维数组的所有元素:
img_2d_shuffled = np.random.permutation(img_flat_sorted).reshape((6,4))
内容的提问来源于stack exchange,提问作者Ian Jones
相关产品推荐
相关产品推荐

