2012-04-13 21 views
2

Numpy新手在這裏。我試圖將我的輸入規範化(也稱爲功能縮放,標準化)到神經網絡。我只是做線性縮放和我使用的公式是:數組和標量的Numpy數學?

I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)

其中I是縮放的輸入值,伊明和IMAX是所需分鐘,經縮放的值的最大範圍內,d是原始數據值以及Dmin和Dmax是原始數據值的最小和最大範圍。我想要一個python方法,它接受一個numpy數組並返回一個數組,其中所有的值都被標準化了。這是我到目前爲止的想法。

def get_normalized_values(array): 
    """I = Imin + (Imax-Imin)*(D-Dmin)/(Dmax-Dmin)""" 
    imin = -1 
    imax = 1 
    dmin = array.amin() 
    dmax = array.amax() 

    normalized = imin + (imax - imin)*(array - dmin)/(dmax - dmin) 

    return normalized 

我的問題是這個工作嗎?或者我必須遍歷數組中的每個元素並執行數學運算?你能用數組和標量做這樣的數學嗎?也就是說,array - dmin會創建一個新的臨時數組,其中每個值都減去了dmin?不知道這是否是正確的術語,但我認爲這是一種「矢量化」方法?

更新

是否有辦法有這個修改到位數組?這不是返回數組的副本,讓函數獲取數組並修改原始數組?

+1

像這樣的事情通常工作正常,只是嘗試它。有一點是,氨和amax應該是最小和最大。或者argmin/argmax。 – 2012-04-13 21:28:09

回答

4

我相信你需要改變通話amin()amax()僅僅是min()max()電話,如my_array.max()

否則,這應該工作正常。您可以像NumPy一樣在Octave/Matlab中執行操作,比如向數組中添加標量,並且它會自動知道將操作映射到所有元素。有時候,你可能需要稍微不同的語法(如知道numpy.linalg.dot()和僅乘以兩個數組之間的區別),但通常情況下,這種情況與您所指出的一樣簡單。

+0

amin,amax和min,max有什麼區別? – User 2012-04-13 21:38:18

+1

我不認爲'amin()'是NumPy中數組類型的成員函數。我很肯定你使用'numpy.amin()'來計算軸上的最小值,並且'my_array.amin()'會拋出一個錯誤(當我在NumPy1.5.1中肯定會拋出一個錯誤測試你的代碼)。適用於數組類型的方法是'min()'方法,如'my_array.min()'。所以如果你願意,你可以選擇調用'amin',但是你不能用數組名稱後面的點語法來調用它。 – ely 2012-04-13 22:00:54

+0

此外,還有一個小的個人美學偏好。我經常使用NumPy函數'argmin()'來獲取最小條目的索引。我不喜歡'min','argmin'和'amin'的潛在混淆。我傾向於只對數組類型使用類方法,並且避免通過調用'np.some_function(array)'應用任何數組操作。我試圖堅持'array.some_function()',並且'amin()'沒有這樣的事情,它只能被稱爲'np.amin(array)'。 – ely 2012-04-13 22:05:20

2

它的蟒蛇 - 只是嘗試它(TM)

我真的不知道答案,但我查不到將問題粘貼到IPython的終端會話的方式。通常每當我想知道如何在numby中做這樣的事情,簡單的方法已經奏效。

+0

+1只是試試吧! – unutbu 2012-04-13 21:25:09