使用np.random.choice查找非均匀样本的索引

时间:2017-06-05 09:31:26

标签: numpy random indexing choice

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

  

Xsample = np.random.choice(X,n,p)

     

Ysample = np.random.choice(Y,n,p)

在样本中有n个点,并且p是概率数组,因为这将为Xsample和Ysample采样不同的点,我留下了找到一种方法来获得一个采样的索引。问题是,无法保证列表中的数字是唯一的,因此不能完全使用np.where。

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

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])