[英]Filtering a numpy array using another array of labels
给定两个numpy数组,即:
images.shape: (60000, 784) # An array containing 60000 images
labels.shape: (60000, 10) # An array of labels for each image
labels
每一行在特定索引处都包含1
,以指示images
相关示例的类别。 (因此[0 0 1 0 0 0 0 0 0 0]
表示该示例属于Class 2(假设我们的类索引从0开始)。
我试图有效地分离images
以便可以一次操纵属于特定类的所有图像。 最明显的解决方案是使用for
循环(如下所示)。 但是,我不确定如何过滤images
,以便仅返回带有适当labels
images
。
for i in range(0, labels.shape[1]):
class_images = # (?) Array containing all images that belong to class i
顺便说一句,我也想知道是否还有更有效的方法可以消除对for
循环的使用。
一种方法是将标签数组转换为bool并将其用于索引:
classes = []
blabels = labels.astype(bool)
for i in range(10):
classes.append(images[blabels[:, i], :])
或者作为使用列表理解的单行代码:
classes = [images[l.astype(bool), :] for l in labels.T]
_classes= [[] for x in range(10)]
for image_index , element in enumerate(labels):
_classes[element.index(1)].append(image_index)
例如,_classes [0]将包含分类为class0的图像索引。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.