Python中打乱NumPy数组并将最大元素固定在[0,0]位置的方法
问题根因
你写的代码有两个核心问题:
np.random.shuffle是原地操作接口,不会返回打乱后的数组,它的返回值固定为None,直接把接口调用结果赋值给r2自然得到空值。- 原生
np.random.shuffle只会沿数组第一个维度打乱整行顺序,不会打乱所有元素的位置,也没有任何机制保证最大值固定在[0,0]位置,完全达不到你的需求。
正确实现代码
实现逻辑很简单:先把数组展平为一维做全局随机打乱,再把最大值手动换到一维数组的首位(对应重塑后二维数组的[0,0]位置),最后还原成原数组的形状即可,代码如下:
import numpy as np r1 = np.array([[150. , 132.5001244 , 115.00024881], [ 97.50037321, 80.00049761, 62.50062201], [ 45.00074642, 27.50087082, 10.00099522]]) # 展平数组后做全局元素打乱 flat_array = r1.flatten() np.random.shuffle(flat_array) # 交换最大值和首位元素位置,保证重塑后[0,0]为最大值 max_pos = np.argmax(flat_array) flat_array[0], flat_array[max_pos] = flat_array[max_pos], flat_array[0] # 还原为原数组形状得到结果 r2 = flat_array.reshape(r1.shape) print("r2 =", r2)
效果说明
运行上述代码不会再返回None,每次执行生成的r2都是元素随机排布的3*3数组,且r2[0,0]位置固定为数组全局最大值150,符合预期要求。
内容的提问来源于stack exchange,提问作者Wiz123
相关产品推荐
相关产品推荐

