Python中的列表和Numpy数组

问题描述:

我试图对数据进行热编码。 数据是vocabulary_size的列表= 17005207.Python中的列表和Numpy数组

要热编码,我由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里面的append函数,但又错了。
当我试试这个:

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数组(输入)与列表(数据)?

信息有关数据:数据= np.ndarray(LEN(字),D型细胞= 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)的维度?

+0

你的错误出现从你试图从'inputs.append()'调用得到**返回**的'astype'属性的事实,那就是None对象。换句话说,你尝试调用None.astype(),这显然不起作用。 – jadsq

+0

冷静下来。三次编辑如此之快,人们无法回答你的问题,因为它每秒都在变化。你似乎明白,ravel或重塑可以帮助你:而不是赶着问这个问题,你有没有试过阅读'numpy.reshape'文档? – YuppieNetworking

+0

Sry @YuppieNetworking,如果它太多了。只是想澄清一下。我确实阅读过文档。只是想要确切的实现,因为在哪里应该是参数重塑或ravel。 – SupposeXYZ

不知道是否我理解正确你问什么,但如果你想要的是一个oneliner,你可以改变你已经工作的代码到这个:

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

所以,你的意思是说..没有其他选择..但我们只需要将数据转换为numpy数组? – SupposeXYZ