从数组

时间:2018-05-25 01:24:01

标签: python numpy scipy

我正在尝试转换numpy数组

 np.array([1,3,2]) 

 np.array([[1,0,0],[0,0,1],[0,1,0]])

知道如何有效地做到这一点? 谢谢!

4 个答案:

答案 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)