Python 如何平衡numpy数组中的类?

Python 如何平衡numpy数组中的类?,python,arrays,numpy,multidimensional-array,Python,Arrays,Numpy,Multidimensional Array,我有2个numpy阵列,如下所示: images包含图像文件的名称(images.shapeis(N,3,128,128)): image_1.jpg image_2.jpg image_3.jpg image_4.jpg 标签包含相应的标签(0-3)(标签。形状为(N,): 1. 1. 3. 2. 我面临的问题是,类是不平衡的,类3>>1>2>0 我想通过以下方式平衡最终数据集: 计算每个类中的图像(样本)数量 获取图像数最少的类的计数 使用该计数作为其他3个类别的最大图像/标签数

我有2个numpy阵列,如下所示:

images
包含图像文件的名称(
images.shape
is(N,3,128,128)):

image_1.jpg
image_2.jpg
image_3.jpg
image_4.jpg

标签
包含相应的标签(0-3)(
标签。形状
为(N,):

1.
1.
3.
2.

我面临的问题是,类是不平衡的,类3>>1>2>0

我想通过以下方式平衡最终数据集:

  • 计算每个类中的图像(样本)数量
  • 获取图像数最少的类的计数
  • 使用该计数作为其他3个类别的最大图像/标签数
  • 图像
    标签
到目前为止,我正在使用
计数器
来确定每个类的图像数量:

from Collections import Counter
import numpy as np

count = Counter(labels)
print(count)

>>>Counter({'1': 2991, '0': 2953, '2': 2510, '3': 2488})

您建议我如何从
图像
标签
中随机弹出匹配元素,使它们包含2488个类0、1和2的样本?

您可以使用
np.random.choice
创建一个整数值掩码,您可以将其应用于标签和图像以平衡数据集:

n = 2488

mask = np.hstack([np.random.choice(np.where(labels == l)[0], n, replace=False)
                      for l in np.unique(labels)])

ix
是否是一个布尔向量,我将应用于这两个数组?(图片和标签)对不起,我以前的回答是错的,我已经纠正了
ix
是一个整数向量,用于为两个数组编制索引