如何为numpy.random.choice基于数组元素大小分配权重?
按元素值加权选择numpy数组索引的方法
直接用元素本身的值作为权重基础,归一化后传给np.random.choice即可,步骤清晰直白:
- 计算数组所有元素的总和,将每个元素值除以总和,得到对应索引的概率(自动满足和为1的要求)
- 生成数组的索引序列,用
np.random.choice传入索引和刚才计算的概率列表
实际代码示例
import numpy as np # 目标数组 arr = np.array([9, 4, 50, 6, 7, 19, 30]) # 计算归一化后的权重(和为1) weights = arr / arr.sum() # 生成数组的索引数组 indices = np.arange(len(arr)) # 按权重随机选择索引 selected_index = np.random.choice(indices, p=weights) print(selected_index)
额外注意点
- 如果数组包含负数,直接用值做权重会报错,需根据需求预处理:比如给所有元素加偏移量让值全为正,或取绝对值,确保权重非负
- 若需要批量选择索引,给
np.random.choice添加size参数即可,例如size=3可一次性选3个索引
内容的提问来源于stack exchange,提问作者StacyDG
相关产品推荐
相关产品推荐

