【问题标题】:Normalize Numpy array规范化 Numpy 数组
【发布时间】:2020-10-27 07:12:41
【问题描述】:

我有一个 Numpy 数组,我想规范化它的值。我使用了以下代码,但规范化后我的数据已损坏。是否有特定的归一化函数?

我该怎么做?

def preprocess(data):
     data=np.nan_to_num(data)  
     maximum=np.amax(data)
     minimum=np.amin(data)
     data=(data-minimum)/(maximum-minimum)  
     print(data)
     return data

数据

【问题讨论】:

  • 这能回答你的问题吗? Min-max normalisation of a NumPy array
  • @CameronChandler .no 我这样做了(根据上面的代码)但我的数据被破坏了。我想要另一个解决方案或准备好的功能。
  • 那么您的输入已损坏(无论这意味着什么)。链接代码和您的代码都运行良好。
  • 我同意。如果您想对所有列进行规范化,您的代码运行良好。请检查您的输入数据?另外,您的输入数据是什么样的?它的形状是什么?你想单独标准化整个数组或每一列?
  • @Grayrigel 我有一列包含 300 个不同的数字,应用此代码后,输出完全为零。有什么问题?

标签: python numpy


【解决方案1】:

如果您正在寻找替代方案,一种可能的选择是使用 scikit-learn 中的 MinMaxScaler。这是一个示例(请注意,这会标准化每一列):

>>> import numpy as np
>>> from sklearn.preprocessing import MinMaxScaler

>>> data = np.random.random((10,2))
>>> sc = MinMaxScaler(feature_range=(0, 1))
>>> data_norm = sc.fit_transform(data)

>>> data_norm
array([[1.        , 0.04518975],
       [0.09360991, 1.        ],
       [0.94696839, 0.28945529],
       [0.43489412, 0.        ],
       [0.47447027, 0.53392371],
       [0.59116035, 0.82860749],
       [0.81434593, 0.78785469],
       [0.        , 0.03156277],
       [0.51659277, 0.06002646],
       [0.82566529, 0.67091873]])

正如@Mr.T 在评论中已经提到的那样,您的代码运行良好,它相对于整个数组标准化了数据。这就是我的意思:

>>> data_norm = sc.fit_transform(data.reshape(-1,1)).reshape(-1,data.shape[1])
>>> data_norm

>>> data_norm
array([[0.94871152, 0.04518975],
       [0.09136079, 1.        ],
       [0.89854913, 0.28945529],
       [0.41418014, 0.        ],
       [0.45161507, 0.53392371],
       [0.56199174, 0.82860749],
       [0.77310208, 0.78785469],
       [0.00281555, 0.03156277],
       [0.49145857, 0.06002646],
       [0.78380902, 0.67091873]])

运行你的代码给出:

>>> data_norm = preprocess(data)
>>> data_norm
array([[0.94871152, 0.04518975],
       [0.09136079, 1.        ],
       [0.89854913, 0.28945529],
       [0.41418014, 0.        ],
       [0.45161507, 0.53392371],
       [0.56199174, 0.82860749],
       [0.77310208, 0.78785469],
       [0.00281555, 0.03156277],
       [0.49145857, 0.06002646],
       [0.78380902, 0.67091873]])

【讨论】:

  • 我输入了你说的第一个代码,但是在程序的其他部分显示此错误:操作数无法与形状一起广播。我该怎么办?跨度>
  • 你的数据看起来不像一个numpy数组,如果是pandas dataframes,你需要data = data.to_numpy()
猜你喜欢
  • 2017-07-16
  • 2015-06-22
  • 2017-11-03
  • 1970-01-01
  • 2021-02-16
  • 1970-01-01
  • 1970-01-01
  • 2012-02-12
  • 2016-05-16
相关资源
最近更新 更多