Python中的List和Numpy数组

时间:2016-08-15 11:06:07

标签: python numpy

我试图对数据进行热编码。 数据是vocabulary_size = 17005207的列表。

为了进行热编码,我列出了num_labels = 100的输入。 以下代码:

inputs = []
for i in range(vocabulary_size):
  inputs.append(np.arange(num_labels) == data[i]).astype(np.float32)

给我一​​个错误:

AttributeError: 'NoneType' object has no attribute 'astype'

我在附加功能中尝试了dtype = np.float32但又错了。
当我尝试这个时:

inputs = []
for i in range(vocabulary_size):
  inputs.append(np.arange(num_labels) == data[i])
inputs = np.array(inputs,dtype=np.float32)

我得到了正确答案:热门编码输入序列vocabulary_size x num_labels。

没有使用Numpy的任何替代解决方案?

解决:我可以直接使用带有列表(数据)的numpy数组(输入)吗?

有关数据的信息: data = np.ndarray(len(words),dtype = np.int32)

重新格式化功能:

  def reformat(data):
      num_labels = vocabulary_size
      print (type(data))
      data = (np.arange(num_labels) == data[:,None]).astype(np.int32)
      return data  
      print (data,len(data))
      return data

新问题:数据的维度是(vocabulary_size,)...如何使用ravel或reshape将数据转换为(1,vocabulary_size)维度?

1 个答案:

答案 0 :(得分:0)

不确定我是否正确理解了您所要求的内容,但如果您想要的是一个oneliner,那么您可能会将您的代码转换为此代码:

inputs = np.array([np.arange(num_labels) == data[i] for i in range(vocabulary_size)], dtype=np.float32)