簡體   English   中英

帶有數組和標量的數學運算?

[英]Numpy math with arrays and scalars?

脾氣暴躁的新手在這里。 我正在嘗試將我的輸入標准化(也稱為特征縮放,標准化)。 我只是做線性縮放,所以我用的公式是:

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

其中I是縮放后的輸入值,Imin和Imax是縮放后的值的期望最小和最大范圍,D是原始數據值,Dmin和Dmax是原始數據值的最小和最大范圍。 我想要一個采用numpy數組並返回所有值均已標准化的數組的python方法。 到目前為止,這就是我的想法。

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嗎? 不確定這是否是正確的術語,但我認為這是“矢量化”方法?

更新

有沒有辦法讓它在適當的地方修改數組? 那不是返回數組的副本,而是讓函數接受數組並修改原始數組嗎?

我相信您需要將對amin()amax()的調用更改為僅對min()max()調用,就像my_array.max()

否則,這應該工作正常。 您可以像使用Octave / Matlab一樣在NumPy中執行操作,例如向數組添加標量,並且它會自動知道將操作映射到所有元素。 有時,您可能需要略有不同的語法(例如了解numpy.linalg.dot()之間的區別並僅將兩個數組相乘),但是通常這樣的事情就像您所指出的那樣簡單。

是python-試試看(tm)

我真的不知道答案,但是我發現的方法是將問題粘貼到iPython終端會話中。 通常,每當我想知道如何以簡單的方式在numby中執行類似的操作時,就會起作用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM