规范化numpy ndarray数据

规范化numpy ndarray数据,numpy,scikit-learn,normalization,Numpy,Scikit Learn,Normalization,我的数据是numpy Ndaray,形状(2,3,4)如下: 我尝试通过sklearn规范化来规范化每列的0-1比例 from sklearn.preprocessing import normalize x = np.array([[[1, 2, 3, 4], [2, 2, 3, 4], [3, 2, 3, 4]], [[4, 2, 3, 4], [5, 2, 3, 4], [6, 2, 3, 4]]]) x.shape ==

我的数据是numpy Ndaray,形状(2,3,4)如下: 我尝试通过sklearn规范化来规范化每列的0-1比例

from sklearn.preprocessing import normalize  

x = np.array([[[1, 2, 3, 4],
      [2, 2, 3, 4],
      [3, 2, 3, 4]],
      [[4, 2, 3, 4],
      [5, 2, 3, 4],
      [6, 2, 3, 4]]])

x.shape ==> ( 2,3,4) 

x = normalize(x, norm='max', axis=0, ) 
但是,我发现了一个错误:

ValueError: Found array with dim 3. the normalize function expected <= 2.

ValueError:找到具有dim 3的数组。正常化函数预期似乎
scikit learn
预期数据阵列最多有两个DIM。因此,要解决这个问题,需要将其重塑为
2D
,将其馈送到
normalize
,这将为我们提供一个
2D
数组,该数组可以重塑为原始形状-

from sklearn.preprocessing import normalize  

normalize(x.reshape(x.shape[0],-1), norm='max', axis=0).reshape(x.shape)
或者,NumPy更简单,可以很好地处理通用Ndarray-

x/np.linalg.norm(x, ord=np.inf, axis=0, keepdims=True)

非常感谢你!!但是,上面的代码不适用于逐列,而是适用于整个数据。应该应用哪个选项?@ChrisJoo不知道你所说的列对列是什么意思。也许你的意思是沿着轴=1而不是轴=0使用它?例如,第一列[[1,2,3],[4,5,6]]应该是[[0.1667,0.3333,0.5000],[0.6667,0.8333,1.0000]],第二列(2,2,2,2,2,2)应该是[1,1,1,1,1]。这看起来不像l2范数,而是最大范数,也沿着最后一个轴。因此,在sklearn版本中使用:
x/np.linalg.norm(x,ord=np.inf,axis=-1,keepdims=1)
norm='max',
。我已经解决了这个问题。。你对我帮助很大。。非常感谢。规格化(x.shape[1],-1),norm='max',axis=0)。重塑(x.shape)