我正在尝试转换numpy数组
np.array([1,3,2])
到
np.array([[1,0,0],[0,0,1],[0,1,0]])
知道如何有效地做到这一点? 谢谢!
答案 0 :(得分:1)
创建一个bool数组,然后填充它:
import numpy as np
a = np.array([1, 2, 3, 0, 3, 2, 1])
b = np.zeros((len(a), a.max() + 1), bool)
b[np.arange(len(a)), a] = 1
答案 1 :(得分:0)
尝试pandas的get dummy方法。
import pandas as pd
import numpy as np
arr = np.array([1 ,3, 2])
df = pd.get_dummies(arr)
如果您需要的是numpy数组对象,请执行:
arr2 = df.values
答案 2 :(得分:0)
也可以从np.eye
或单位矩阵中选择正确的值:
a = np.array([1,3,2])
b = np.eye(max(a))[a-1]
这可能是最直接的。
答案 3 :(得分:0)
你可以这样比较[1, 2, 3]
:
>>> a = np.array([1,3,2])
>>> np.equal.outer(a, np.arange(1, 4)).view(np.int8)
array([[1, 0, 0],
[0, 0, 1],
[0, 1, 0]], dtype=int8)
或同等但稍快的
>>> (a[:, None] == np.arange(1, 4)).view(np.int8)