Python 如何对所有类别的数据进行随机抽样?

Python 如何对所有类别的数据进行随机抽样?,python,numpy,Python,Numpy,我有一些数据和相应的标签,如下所示: data = [img1, img2, img3, ...] # each category has 1000 samples, total data is 10000 labels = [1, 1, 2, 2, 3, 3, 4, 4, ...] # total num of labels is 10 我想创建一个新的子数据集,其中一个类别有1000个样本,其他类别分别有100个样本。因此,子数据集中的总数据量将为1900。(1000对900)

我有一些数据和相应的标签,如下所示:

data = [img1, img2, img3, ...]    # each category has 1000 samples, total data is 10000
labels = [1, 1, 2, 2, 3, 3, 4, 4, ...]    # total num of labels is 10
我想创建一个新的子数据集,其中一个类别有1000个样本,其他类别分别有100个样本。因此,子数据集中的总数据量将为1900。(1000对900)

(我的目的是为二进制分类制作子数据集)

因此,我需要以相同的数量对每个类别的数据进行随机抽样

我认为这和分层抽样很相似,所以我试图在scikit learn中找到方法,但我做不到


我该怎么做呢?

我也找不到函数,所以我做了一个

让我们制作一个伪造的数据集:

import numpy as np

x = np.random.choice(np.arange(10), 10_000)
现在,如果从
x
中获取,我们将查找返回相同分层样本的索引

d=dict()
对于np.unique(x)中的val:
d[str(val)]=np.其中(x==val)
d[str(val)]=np.random.choice(d[str(val)][0],100,replace=False)
ix=np.concatenate([d.values()中的值的值])
让我们测试一下:

print(np.unique(x[ix], return_counts=True))

您也可以将
ix
y
或任何其他数组一起使用。

感谢您的回答!
Out[64]: 
(array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]),
 array([100, 100, 100, 100, 100, 100, 100, 100, 100, 100], dtype=int64))