2017-08-30 225 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

這確實似乎有伎倆。謝謝! –