Numpy如何基于另一数组条件从主数组中随机抽取指定数量元素
报错原因
你代码里的p参数是用来指定每个元素被选中的概率分布的,需要和输入数组长度一致的一维数组,而你传入的np.where(selector>2)返回的是满足条件的索引组成的元组,完全不符合参数要求,自然会报错。
你需求的本质是先限定可选元素的范围,再做随机抽样,不需要用到p参数,直接先筛选符合条件的元素再抽样即可。
正确实现
最简洁的写法:
import numpy as np main_array = np.array([11,12,13,14,15,16]) selector = np.array([0,1,2,3,3,3]) # 第一步:筛选出selector对应位置值>2的所有元素作为候选集 candidates = main_array[selector > 2] # 第二步:从候选集中无放回抽取3个元素 y = np.random.choice(candidates, 3, replace=False)
如果你后续需要用到选中元素在原数组的索引,可以用先筛选索引的写法:
# 取所有满足selector>2的原数组索引 valid_idx = np.where(selector > 2)[0] # 从合法索引里无放回抽3个 picked_idx = np.random.choice(valid_idx, 3, replace=False) # 从原数组取对应元素 y = main_array[picked_idx]
两种写法得到的y都是从[14,15,16]中随机排序的结果,符合你的预期。
内容的提问来源于stack exchange,提问作者sixtytrees
相关产品推荐
相关产品推荐

