Python 3.5中random.choice存储值二次调用后被覆盖问题求助
解决随机选择值被覆盖的问题
看起来你遇到的问题主要有两个:一是变量引用导致的数组共享,二是如果要存储多次随机选择结果,需要正确生成独立的存储数组。我来一步步帮你解决:
首先分析你的代码问题
你写的masschoice = achoice是典型的numpy数组引用赋值——这时候masschoice和achoice指向的是同一个数组对象,后续任何对其中一个的修改都会同步到另一个,这可不是你想要的“分别存储不同数组的随机值”。
另外,如果你想用random.choice()存储多次选择的结果,直接赋值单个值会覆盖之前的内容,需要循环填充或者用更高效的numpy原生随机函数。
解决方案分两种场景
场景1:只需要从每个数组选一个值(单次选择)
如果只是每次从三个数组各取一个随机值,不需要存储多次结果,直接单独赋值就行,根本不需要数组:
import numpy as np import random a_onc = np.array([1,2,3,4,5]) mass_onc = np.array([10,11,12,13,14,15]) age_onc = np.array([23,24,25,21,22,27]) # 每个变量单独存储一个随机值,互不干扰 achoice = random.choice(a_onc) masschoice = random.choice(mass_onc) agechoice = random.choice(age_onc)
场景2:需要存储多次随机选择的结果(比如选2次)
如果你想保存多组随机值,推荐用numpy自带的np.random.choice(),它可以直接指定生成的样本数量,而且效率更高:
import numpy as np a_onc = np.array([1,2,3,4,5]) mass_onc = np.array([10,11,12,13,14,15]) age_onc = np.array([23,24,25,21,22,27]) # 定义要生成的样本数量 num_samples = 2 # 每个数组独立生成指定数量的随机选择结果 achoice = np.random.choice(a_onc, size=num_samples) masschoice = np.random.choice(mass_onc, size=num_samples) agechoice = np.random.choice(age_onc, size=num_samples)
这样achoice就是一个长度为2的数组,每个元素都是从a_onc里随机选的,三个数组完全独立,不会互相覆盖。
如果你坚持要用标准库的random.choice(),那需要循环填充每个数组,并且要确保每个存储数组是独立创建的:
import numpy as np import random a_onc = np.array([1,2,3,4,5]) mass_onc = np.array([10,11,12,13,14,15]) age_onc = np.array([23,24,25,21,22,27]) num_samples = 2 # 每个存储数组单独创建,不要用赋值引用 achoice = np.zeros(num_samples) masschoice = np.zeros(num_samples) agechoice = np.zeros(num_samples) # 循环填充每个位置的随机值 for i in range(num_samples): achoice[i] = random.choice(a_onc) masschoice[i] = random.choice(mass_onc) agechoice[i] = random.choice(age_onc)
关键提醒
numpy数组是可变对象,直接用=赋值是传递引用,不是复制数组。如果想复制数组,你可以用masschoice = achoice.copy(),但在你的场景里,直接创建新的空数组更合理。
内容的提问来源于stack exchange,提问作者Rob S
相关产品推荐
相关产品推荐

