将 numpy 数组规范化为 min max 不同形式的列 min max

时间:2021-05-15 16:12:48

标签: numpy-ndarray database-normalization

我有一个函数可以将 numpy 数组规范化为列本身中的最小值:

def normalize_function(data):
   min = np.amin(data,axis=0)
   max = np.amax(data,axis=0)
   return (data - min)/(max-min)

Value = pdData[['wave1','value2','value3','wave3']].to_numpy()
Value = normalize_function(Value)

但是,我需要分别为每列预设自己的最小值。 示例:对于 wave1 min=100 max=300,对于 value2 min=2 max=10,对于 value2 min=10 max=100。这些最小最大值与列内的最小最大值不同。感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

这是我目前的解决方案。将预设的最小最大值添加到 numpy 数组,标准化然后删除那些添加的最小最大值。

# Normalization preset
normSetFile = "NormSet.xls"
normSetCsv = pd.read_excel(normSetFile)
normSetDF = pd.DataFrame(normSetCsv).astype(float)
npNormSet = normSetDF.to_numpy(dtype=np.float64)

def normalize_function(data):
min = np.amin(data,axis=0)
max = np.amax(data,axis=0)
return (data - min)/(max-min)

def norm_check(data):
for col in range(0, data.shape[1]):
    for ind in range(0, data.shape[0]):
        if (data[ind, col] < npNormSet[0, col]):
            print('Error    data ' + str(data[ind, col]) + ' at column ' + str(col) + ' index ' + str(ind) + ' is lower than min ' + str(npNormSet[0, col]))
        if (data[ind, col] > npNormSet[1, col]):
            print('Error    data ' + str(data[ind, col]) + ' at column ' + str(col) + ' index ' + str(ind) + ' is bigger than max ' + str(npNormSet[1, col]))

def Normalize(data):
norm_check(data)
data = np.append(data, npNormSet, axis=0)
data = normalize_function(data)
data = np.delete(data, slice(len(data)-2, len(data)), axis=0)
return data
相关问题