如何将多标签 np.array 变成一对一?

How to turn a multi-label np.array to one vs all?

我有一个带有多个标签的 np.array,比方说 label1,...,label10

给定一个特定的标签,假设 label1。我想把它变成一个二进制向量,其中 y'[j] == 1 iff y[j] == label1

怎么做?

好的,我找到了一个好办法:

import numpy as np
label = 'label1'
tobinary = lambda val: 1 if val == label else 0

vfunc = np.vectorize(tobinary)
vfunc(y)

依靠this SO answer

简单比较:

>>> np.array([f'label{i}' for i in range(10)])
array(['label0', 'label1', 'label2', 'label3', 'label4', 'label5',
       'label6', 'label7', 'label8', 'label9'], dtype='<U6')
>>> ar = np.array([f'label{i}' for i in range(10)])
>>> ar == 'label1'
array([False,  True, False, False, False, False, False, False, False,
       False])

如果你想要一个二元向量:

>>> (ar == 'label1').astype(int)
array([0, 1, 0, 0, 0, 0, 0, 0, 0, 0])