Python 数组和标量的Numpy数学?

Python 数组和标量的Numpy数学?,python,numpy,neural-network,normalization,Python,Numpy,Neural Network,Normalization,我是新手。我正试图将我的输入标准化(也称为特征缩放、标准化)到神经网络。我只是做线性缩放,我使用的公式是: 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)

其中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?不确定这是否是正确的术语,但我认为这是一种“矢量化”方法

更新

有没有办法让它修改阵列?也就是说,与其返回数组的副本,不如让函数获取数组并修改原始数组?

这是python,只需尝试一下(tm)


我真的不知道答案,但我找到答案的方法是将问题粘贴到iPython终端会话中。通常,每当我想知道如何在numby中执行类似的操作时,简单的方法就起作用了。

我相信您需要将调用
amin()
amax()
更改为只调用
min()
max()
,就像在
my_array.max()
中一样


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

这类事情通常可以正常工作,请尝试一下。有一点是,amin和amax应该只是min和max.或argmin/argmax。amin、amax和min、max之间有什么区别?我不相信
amin()
是NumPy中数组类型的成员函数。我很确定您使用
numpy.amin()
来计算沿轴的最小值,并且
my_array.amin()
将抛出一个错误(当我在上面测试代码时,它肯定会在numpy 1.5.1中为我抛出一个错误)。为数组类型实现的正确方法是
min()
方法,例如
my\u array.min()
。因此,如果您愿意,可以选择调用
amin
,但不能在数组名称后使用点语法调用。此外,还有一个小小的个人审美偏好。我经常使用NumPy函数
argmin()
获取最小项的索引。我不喜欢
min
argmin
amin
的潜在混淆。我倾向于只使用数组类型的类方法,并且通过调用
np.some_function(array)
避免应用任何数组操作。我尝试坚持<代码>数组。一些函数()/代码>,并没有“<代码> AN())/代码>,它只能被称为<代码> NP(阿明)(数组)< /代码>。如果我的答案有所帮助,请考虑接受它。如果没有,请告诉我,我很乐意尝试提供更多帮助。这是因为我修改了我的问题,并希望在编辑中得到答案。但我决定提出一个新问题: