主要问题是Python 3告诉我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
变量的事实有关。但我不清楚我会采取什么方式将其转换为我上面的代码可以接受的某种形式。
我主要只是想了解在这种情况下应该做些什么。
答案 0 :(得分:3)
首先将dict_values
对象转换为列表,以便根据列表的内容创建数组。 NumPy无法从dict_values
构建包含项的数组,而是创建一个类型为object的数组并将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)