如何将多标签 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])
我有一个带有多个标签的 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])