2016-07-25 27 views
5

我正試圖找出在列表中應用的操作。我有列表/數組名稱預測並執行以下指令集。Python列表表示法,Numpy數組表示法:預測[predictions <1e-10] = 1e-10

predictions[predictions < 1e-10] = 1e-10 

此代碼片段來自使用Numpy的Udacity機器學習任務。

它被以如下方式使用:

def logprob(predictions, labels): 
    """Log-probability of the true labels in a predicted batch.""" 
    predictions[predictions < 1e-10] = 1e-10 
    return np.sum(np.multiply(labels, -np.log(predictions)))/labels.shape[0] 

如@MosesKoledoye和各種其它所指出的,它實際上是一個numpy的陣列。 (Numpy是一個Python庫)

這條線做什麼?

+7

最有可能不是一個列表,而是一個numpy數組 –

+2

只是爲了清楚'預測'真的是什麼:請提供一個片段,顯示'預測'是如何定義的,並提供'type(predictions)'的輸出。 – albert

+1

請澄清(在你的問題的主體中,而不是在評論中)「預測」是一個標準的Python列表,還是一個Numpy數組,或者其他類型的數據結構。 –

回答

4

正如@MosesKoledoye指出的,predictions最有可能是numpy陣列。然後使用predictions < 1e-10生成布爾數組。在條件設置的布爾數組爲True的所有索引中,值將更改爲1e-10,即。 10 -10

例子:

>>> a = np.array([1,2,3,4,5]) #define array 
    >>> a < 3 #define boolean array through condition 
    array([ True, True, False, False, False], dtype=bool) 

    >>> a[a<3] #select elements using boolean array 
    array([1, 2]) 

    >>> a[a<3] = -1 #change value of elements which fit condition 
    >>> a 
    array([-1, -1, 3, 4, 5]) 

的原因,這可能在代碼中做可能是防止除以零或不是插入一個非常小的數目,以防止弄亂的東西負數。

+0

謝謝你的明確例子 –

1

將條件(元素< 1e-10)爲true的數組的所有元素設置爲1e-10。 實際上你正在設定一個最小值。

+0

這不會發生什麼。你將一個列表與一個浮點數進行比較,在括號中,這會創建一個類型錯誤=/ – HolyDanna

+1

@HolyDanna這將與'numpy'數組一起使用,而不是香草列表 – jonrsharpe

+0

@jonrsharpe問題說'預測'是一個列表,而不是陣列。 – HolyDanna