2013-07-31 91 views
3

我目前有一個數組中的最小值的索引數組。1在索引位置的數組

它看起來是這樣的:

[[0], 
[1], 
[2], 
[1], 
[0]] 

(最高指數爲3)

我要的是一個數組,看起來像這樣:

[[1, 0, 0] 
[0, 1, 0] 
[0, 0, 1] 
[0, 1, 0] 
[1, 0, 0]] 

凡1在最小的一欄中。

有沒有一種簡單的方法在numpy中做到這一點?

回答

6

==使用NumPy的廣播:

>>> minima = np.array([[0], [1], [2], [1], [0]]) 
>>> minima == arange(minima.max() + 1) 
array([[ True, False, False], 
     [False, True, False], 
     [False, False, True], 
     [False, True, False], 
     [ True, False, False]], dtype=bool) 
>>> (minima == arange(minima.max() + 1)).astype(int) 
array([[1, 0, 0], 
     [0, 1, 0], 
     [0, 0, 1], 
     [0, 1, 0], 
     [1, 0, 0]]) 
0

的列表,你可以做

>>> a = [[0], [1], [2], [1], [0]] 
>>> N = 3 
>>> [[1 if x[0] == i else 0 for i in range(N)] for x in a] 
[[1, 0, 0], [0, 1, 0], [0, 0, 1], [0, 1, 0], [1, 0, 0]]