数据规范化

Normalization of data

我有一个代码可以规范化从 xls 导入的数据。下面是

import numpy as np
Xt, Tt = XLSImport('AI_sample.xlsx')

# calculate the maximum values
valX1_max = np.max((Xt)[0])
valX2_max = np.max((Xt)[1])
valX3_max = np.max((Xt)[2])
valX4_max = np.max((Xt)[3])
valX5_max = np.max((Xt)[4])
valX6_max = np.max((Xt)[5])
valX7_max = np.max((Xt)[6]) 
valX8_max = np.max((Xt)[7])

valT1_max = np.max((Tt)[0])
valT2_max = np.max((Tt)[1])

print valX1_max, valX2_max, valX3_max, valX4_max, valX5_max, valX6_max, valX7_max, valX8_max, valT1_max, valT2_max


# normalize data
Xt[0] /= valX1_max
Xt[1] /= valX2_max
Xt[2] /= valX3_max
Xt[3] /= valX4_max
Xt[4] /= valX5_max
Xt[5] /= valX6_max
Xt[6] /= valX7_max
Xt[7] /= valX8_max
Tt[0] /= valT1_max
Tt[1] /= valT2_max

print Xt, Tt

这是一个相当简单的代码,其中 Xt 和 Tt 是一组数据。 Xt 的维度是 (750, 8),其中 750 是行数,8 是列数,Tt 的维度是 (750, 2) 对应于上述行和列的数字。正在根据特定列中的最大值对每一列的数据进行标准化。

现在我想创建一个函数并创建一个循环,这样我就不想像我的示例中那样一遍又一遍地重复相同的代码。我怎么做?我是编程新手,对循环概念不太熟悉。提前谢谢你

我想要这样的东西:

func norm(param):
     val_max = []
     for i in range(num_rows):
           #and the normalization inside this block

我应该怎么做?

我建议使用 python 中可用的众多优秀数据处理库之一。 Pandas 好像特别好用。您需要的大部分内容可能已经在其中进行了编程!

你可以考虑miniconda。它是一个 python 发行版,可以很容易地安装复杂的依赖项,例如 numpy(其中 pandas 取决于)

一旦你有了 python + pandas 运行,做标准化就很容易了。请参阅 this answer 以获得更好的解释!!

祝你好运,欢迎来到 python 编程的精彩世界:)

编辑:重读你的问题后,我认为你现在已经有了 numpy 运行。所以安装 pandas 更容易,使用 pip。

将您的数据导入 numpy 数组。然后你可以做的是根据每一列获得最大值,然后将整个数组除以该最大值。

即:

import numpy as np

arr = np.random.randint(0, 100, (10,5)) # replace this line with [np.array][1] 
                                        # to load your data from excel

print(arr)

[[41 71 95 62 26]
 [85 37  5 71 74]
 [14 75 93 70 66]
 [86 79 93  7 39]
 [ 4 84 97 92 24]
 [54 28 49 62 36]
 [37 63 84 45 88]
 [48 92 48 93 94]
 [47 74 22 58 94]
 [34 92 86 30 85]]

print(np.max(arr, axis=0))

[86 92 97 93 94]

print(arr/np.max(arr, axis=0))

[[ 0.47674419  0.77173913  0.97938144  0.66666667  0.27659574]
 [ 0.98837209  0.40217391  0.05154639  0.76344086  0.78723404]
 [ 0.1627907   0.81521739  0.95876289  0.75268817  0.70212766]
 [ 1.          0.85869565  0.95876289  0.07526882  0.41489362]
 [ 0.04651163  0.91304348  1.          0.98924731  0.25531915]
 [ 0.62790698  0.30434783  0.50515464  0.66666667  0.38297872]
 [ 0.43023256  0.68478261  0.86597938  0.48387097  0.93617021]
 [ 0.55813953  1.          0.49484536  1.          1.        ]
 [ 0.54651163  0.80434783  0.22680412  0.62365591  1.        ]
 [ 0.39534884  1.          0.88659794  0.32258065  0.90425532]]

打印只是为了可视化,你只需要:

import numpy as np

arr = np.random.randint(0, 100, (10,5))

norm = arr/np.max(arr, axis=0)