gpt4 book ai didi

numpy - 在 NumPy 中按类别划分训练数据

转载 作者:行者123 更新时间:2023-12-01 11:27:53 25 4
gpt4 key购买 nike

我有一个 50000 x 784 的数据矩阵(50000 个样本和 784 个特征)和相应的 50000 x 1 类向量(类是整数 0-9)。我正在寻找一种有效的方法将数据矩阵分组为 10 个数据矩阵和类向量,每个矩阵和类向量都只有特定类 0-9 的数据。

除了循环遍历数据矩阵并以这种方式构建其他 10 个矩阵之外,我似乎找不到一种优雅的方法来做到这一点。

有谁知道在 scipy 中是否有一种干净的方法可以做到这一点, numpy , 或 sklearn ?

最佳答案

在 numpy 中执行此操作的最简洁方法可能是通过排序,尤其是当您有很多类时:

SAMPLES = 50000
FEATURES = 784
CLASSES = 10
data = np.random.rand(SAMPLES, FEATURES)
classes = np.random.randint(CLASSES, size=SAMPLES)

sorter = np.argsort(classes)
classes_sorted = classes[sorter]
splitter, = np.where(classes_sorted[:-1] != classes_sorted[1:])
data_splitted = np.split(data[sorter], splitter + 1)
data_splitted将是一个数组列表,一个用于在 classes 中找到的每个类.使用 SAMPLES = 10 运行上面的代码, FEATURES = 2CLASSES = 3我得到:
>>> data
array([[ 0.45813694, 0.47942962],
[ 0.96587082, 0.73260743],
[ 0.70539842, 0.76376921],
[ 0.01031978, 0.93660231],
[ 0.45434223, 0.03778273],
[ 0.01985781, 0.04272293],
[ 0.93026735, 0.40216376],
[ 0.39089845, 0.01891637],
[ 0.70937483, 0.16077439],
[ 0.45383099, 0.82074859]])

>>> classes
array([1, 1, 2, 1, 1, 2, 0, 2, 0, 1])

>>> data_splitted
[array([[ 0.93026735, 0.40216376],
[ 0.70937483, 0.16077439]]),
array([[ 0.45813694, 0.47942962],
[ 0.96587082, 0.73260743],
[ 0.01031978, 0.93660231],
[ 0.45434223, 0.03778273],
[ 0.45383099, 0.82074859]]),
array([[ 0.70539842, 0.76376921],
[ 0.01985781, 0.04272293],
[ 0.39089845, 0.01891637]])]

如果要确保排序稳定,即排序后同一类中的数据点保持相同的相对顺序,则需要指定 sorter = np.argsort(classes, kind='mergesort') .

关于numpy - 在 NumPy 中按类别划分训练数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35822299/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com