Python Numpy one热编码器仅显示带有零的巨大阵列

Python Numpy one热编码器仅显示带有零的巨大阵列,python,numpy,Python,Numpy,我有一个(400,1)numpy数组,该数组具有4300、4450、4650…等值,这些值可以分布在20个类周围,即4300类1、4450类2…,并尝试使用下面的代码将该数组转换为一个热编码列表。y\u train\u onehot显示了400个数组的列表,其中每个数组的大小大于4000,即每个数组大约有4000个零。我如何解决这个问题,以便每个值都有一个热编码向量,即4300可以00001 def convertOneHot(data): y=np.array([int(i[0]) f

我有一个
(400,1)
numpy数组,该数组具有
4300、4450、4650…
等值,这些值可以分布在20个类周围,即
4300类1、4450类2…
,并尝试使用下面的代码将该数组转换为一个热编码列表。
y\u train\u onehot
显示了400个数组的列表,其中每个数组的大小大于4000,即每个数组大约有4000个零。我如何解决这个问题,以便每个值都有一个热编码向量,即
4300
可以
00001

def convertOneHot(data):
    y=np.array([int(i[0]) for i in data])
    y_onehot=[0]*len(y)
    for i,j in enumerate(y):
        y_onehot[i]=[0]*(y.max() + 1)
        y_onehot[i][j]=1
    return (y,y_onehot)

y_train,y_train_onehot = convertOneHot(data)

以下是一些未优化的示例:

def convert_to_one_hot(y):
  levels=np.unique(y)
  n_classes=levels.shape[0]
  one_hot=np.zeros((y.shape[0],n_classes),"uint8")
  for i in xrange(y.shape[0]):
    for index,level in enumerate(levels):
      if  y[i]==level:
        one_hot[i,index]=1
  return one_hot
编辑1一个可读性较差但更优雅的版本:

def convert_to_one_hot2(y):
  levels=np.unique(y)
  one_hot=(y==levels).astype("uint8")
  return one_hot 

以下是一些未优化的示例:

def convert_to_one_hot(y):
  levels=np.unique(y)
  n_classes=levels.shape[0]
  one_hot=np.zeros((y.shape[0],n_classes),"uint8")
  for i in xrange(y.shape[0]):
    for index,level in enumerate(levels):
      if  y[i]==level:
        one_hot[i,index]=1
  return one_hot
编辑1一个可读性较差但更优雅的版本:

def convert_to_one_hot2(y):
  levels=np.unique(y)
  one_hot=(y==levels).astype("uint8")
  return one_hot 

我用了熊猫假人,很简单

>>> import pandas as pd
>>> s = pd.Series(y_train)
然后

y_train_onehot = pd.get_dummies(s)

我用了熊猫假人,非常简单

>>> import pandas as pd
>>> s = pd.Series(y_train)
然后

y_train_onehot = pd.get_dummies(s)

你能添加一个最小代表性样本并解释预期结果吗?@Divakar我刚刚上传了一张截图,你能添加一个最小代表性样本并解释预期结果吗?@Divakar我刚刚上传了一张截图