2017-01-03 35 views
1

我試圖填充一個numpy數組,我似乎無法從numpy的文檔中找到正確的方法。我有一個數組:使用零填充一個numpy數組,並使用另一個數組作爲索引

a = array([2, 1, 3, 5, 7]) 

這表示我希望創建的數組的索引。所以在索引值2或1或3等我想有一個在數組中,並在目標數組中的其他任何地方,填充零。有點像數組掩碼。我還想指定目標陣列的總長度,l。所以,我的理想功能想是這樣的:

>>> foo(a,l) 
array([0,1,1,1,0,1,0,1,0,0,0] 

,其中l=10對於上面的例子。

編輯:

所以我寫了這個功能:

def padwithones(a,l) : 
    p = np.zeros(l) 
    for i in a : 
     p = np.insert(p,i,1) 
    return p 

其中給出:

Out[19]: 
array([ 0., 1., 0., 1., 1., 1., 0., 1., 0., 0., 0., 0., 0., 
     0., 0.]) 

這是不正確!

+0

你嘗試過什麼嗎?也許使用'np.zeros'然後索引賦值......? –

+0

所以使用生成器可能會確定何時要插入'np.zeros'數組? –

+1

不,只是'array_of_zeroes [a] = 1' –

回答

2

你在找什麼基本上是一個熱陣列:

def onehot(foo, l): 
    a = np.zeros(l, dtype=np.int32) 
    a[foo] = 1 
    return a 

例子:

In [126]: onehot([2, 1, 3, 5, 7], 10) 
Out[126]: array([0, 1, 1, 1, 0, 1, 0, 1, 0, 0]) 
+0

很好。謝謝! –

+0

如果你使用'dtype = bool',它將佔用1/4的空間。 –

相關問題