数据规范化
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)
我有一个代码可以规范化从 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)