2017-08-30 222 views
1

主要问题是Python 3告诉我dict_values被用作参数,而显然需要一个字符串或数字。 (即使一个浮动一个数字,我这样想着。)使用NumPy的浮点参数和dict_values

...我已经寻找各种解决这个问题,而我看到的,似乎有什么建议可能完成方面,没什么只是来的权利并以一种可以概括我的特点的方式说出来。

的代码是:

def get_features(self, state, action): 
    q_state = np.array(SimpleExtractor().get_features(state, action).values()).astype(dtype=float) 
    return q_state 

返回当执行代码以下错误:

float() argument must be a string or a number, not 'dict_values' 

按照建议的解决方案之一,我试图改变NP线以便dtype被指示为:

def get_features(self, state, action): 
    q_state = np.array(SimpleExtractor().get_features(state, action).values(), dtype=float) 
    return q_state 

但是,返回完全相同的错误。

我不知道,如果它很重要但SimpleExtractor那我打电话是代码的大型位:SimpleExtractor

我有一些理由相信,这个代码特别的一点,因为写的,会工作在Python 2上。但是我正在使用的特定项目已经被重新调整以适应Python 3,所以我不能再使用Python 2来运行它来测试。

我认为这可能与features变量如何从get_features方法SimpleExtractor返回的事实有关。但是我不清楚我会怎么做才能把它变成我上面的代码可以接受的形式。

我主要是在寻找我在这种情况下应该做什么的见解。

回答

2

dict_values对象首先转换为列表,以便根据列表的内容创建数组。 NumPy的不能建立从dict_values所包含的项目的数组,它,而不是创建对象类型的数组,并提出了dict_values对象中:

>>> np.array(d.values()) 
array(dict_values([2, 4]), dtype=object) 

你在做什么:

>>> import numpy as np 
>>> d = {1: 2, 3: 4} 
>>> np.array(d.values()).astype(float) 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: float() argument must be a string or a number, not 'dict_values' 

你应该做什么:

>>> np.array(list(d.values())).astype(float) 
array([ 2., 4.]) 

q_state = np.array(list(SimpleExtractor().get_features(state, action).values()))\ 
              .astype(dtype=float) 
+0

这确实似乎有伎俩。谢谢! –