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)的维度?
答
不知道是否我理解正确你问什么,但如果你想要的是一个oneliner,你可以改变你已经工作的代码到这个:
inputs = np.array([np.arange(num_labels) == data[i] for i in range(vocabulary_size)], dtype=np.float32)
+0
所以,你的意思是说..没有其他选择..但我们只需要将数据转换为numpy数组? – SupposeXYZ
你的错误出现从你试图从'inputs.append()'调用得到**返回**的'astype'属性的事实,那就是None对象。换句话说,你尝试调用None.astype(),这显然不起作用。 – jadsq
冷静下来。三次编辑如此之快,人们无法回答你的问题,因为它每秒都在变化。你似乎明白,ravel或重塑可以帮助你:而不是赶着问这个问题,你有没有试过阅读'numpy.reshape'文档? – YuppieNetworking
Sry @YuppieNetworking,如果它太多了。只是想澄清一下。我确实阅读过文档。只是想要确切的实现,因为在哪里应该是参数重塑或ravel。 – SupposeXYZ