我试图对数据进行热编码。 数据是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)维度?
答案 0 :(得分:0)
不确定我是否正确理解了您所要求的内容,但如果您想要的是一个oneliner,那么您可能会将您的代码转换为此代码:
inputs = np.array([np.arange(num_labels) == data[i] for i in range(vocabulary_size)], dtype=np.float32)