2

麻木的新手在这里。我正在尝试对神经网络的输入进行归一化(又名特征缩放、标准化)。我只是做线性缩放,我使用的公式是:

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

其中 I 是缩放的输入值,Imin 和 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 吗?不确定这是否是正确的术语,但我认为这是一种“矢量化”方法?

更新

有没有办法让这个修改数组到位?那不是返回数组的副本,而是让函数获取数组并修改原始数组?

4

2 回答 2

4

我相信您需要更改呼叫amin(),并且amax()只是对min()and的呼叫max(),如my_array.max().

否则,这应该可以正常工作。你可以在 NumPy 中做一些类似于 Octave/Matlab 的事情,比如向数组添加一个标量,它会自动知道将操作映射到所有元素。有时,您可能需要稍微不同的语法(例如知道两个数组之间的差异numpy.linalg.dot()并仅将其相乘),但总的来说,这样的事情就像您所指出的那样简单。

于 2012-04-13T21:25:38.537 回答
2

它是 python - 试试吧 (tm)

我真的不知道答案,但我找出答案的方法是将问题粘贴到 iPython 终端会话中。通常,每当我想知道如何以麻木方式做这样的事情时,简单的方法就奏效了。

于 2012-04-13T21:24:28.507 回答