Python如何给列表或numpy数组多元素赋值 每行随机设5个0-10值
实现方案
你可以直接用numpy的随机索引生成能力完成需求,参考代码如下:
import numpy as np # 你原有的初始化代码,这里直接用np.zeros生成全0数组效率更高 num = 782 sol = 4 pop_size = [sol, num] initial_population_1 = np.zeros(pop_size) n_select = 5 # 每行需要选中的元素数量 for row_idx in range(sol): # 为当前行生成5个不重复的随机列索引 random_cols = np.random.choice(num, size=n_select, replace=False) # 给对应位置赋值0~10之间的随机数 initial_population_1[row_idx, random_cols] = np.random.uniform(low=0.0, high=10.0, size=n_select)
如果需要处理更大规模的数组,想要避免循环、用向量化写法提升效率,可以参考以下实现:
n_select = 5 # 一次性生成所有行的随机列索引,shape为(4,5) all_random_cols = np.array([np.random.choice(num, size=n_select, replace=False) for _ in range(sol)]) # 生成对应数量的0~10随机数 random_values = np.random.uniform(low=0.0, high=10.0, size=(sol, n_select)) # 批量完成赋值 initial_population_1[np.arange(sol)[:, None], all_random_cols] = random_values
效果验证
你可以通过以下代码检查赋值结果是否符合要求:
# 检查每行的非0元素数量,输出应为[5 5 5 5] print(np.count_nonzero(initial_population_1, axis=1)) # 检查所有非0元素是否在0~10范围内,输出应为True print((initial_population_1[initial_population_1>0].min() > 0) & (initial_population_1[initial_population_1>0].max() <10))
内容的提问来源于stack exchange,提问作者Zzyy
相关产品推荐
相关产品推荐

