Numpy 用np.random.choice求非均匀样本的指标

Numpy 用np.random.choice求非均匀样本的指标,numpy,random,indexing,choice,Numpy,Random,Indexing,Choice,假设我有两个大的一维数组X和Y的位置信息,我想从这些数组中非均匀地采样位置。 我想我可以用np.random.choice来实现这一点,但因为它只接受1D数组,所以我不能: Xsample=np.random.choiceX,n,p Ysample=np.random.choiceY,n,p 样本中有n个点,p是一个概率数组,因为这将对Xsample和Ysample的不同点进行采样,所以我需要找到一种方法来获得一次采样的索引。问题是不能保证列表中的数字是唯一的,因此不能完全使用np.where

假设我有两个大的一维数组X和Y的位置信息,我想从这些数组中非均匀地采样位置。 我想我可以用np.random.choice来实现这一点,但因为它只接受1D数组,所以我不能:

Xsample=np.random.choiceX,n,p

Ysample=np.random.choiceY,n,p

样本中有n个点,p是一个概率数组,因为这将对Xsample和Ysample的不同点进行采样,所以我需要找到一种方法来获得一次采样的索引。问题是不能保证列表中的数字是唯一的,因此不能完全使用np.where


有什么想法吗?

Doh,我可以从索引中取样。 下面是一个工作示例:

X = np.array([1, 2, 3, 4, 5])
Y = np.array([11, 12, 13, 14, 15]) 
p = [0.25, 0., 0.5, 0.25] 

sample_idxs = np.random.choice(arange(len(X)), 2, p)
# can also be
# sample_idxs = np.random.choice(len(X), 2, p)
sample_idxs
> array([2, 4])

X[sample_idxs]
> array([3, 5])

Y[sample_idxs]
> array([13, 15])

是否应该是np.random.choicenp.arangelenX,2,p?是的,@mgutsche你是对的,为了清楚起见,我将更改我的答案。但是,也可以将第一个参数a作为int,并执行arangea。