2013-10-07 104 views
2

是否有一種通過對象字典迭代的方法,調用每個對象的成員函數並將值賦給numpy數組。我有下面的成員函數代碼:同時遍歷字典和numpy數組

# Preallocate for Number of Objects in the dictionary 
    newTable = numpy.zeros(self.numObj); 

    for item, nt in zip(self.dictTable.values(), newTable): 
     dt = item.CalculateDutyCycle() * 100.0 


    return newTable  

這不運行,因爲我分配到numpy的陣列是不是正確。我可以用nditer正確地做到這一點,但不知道如何將該迭代器與字典表迭代結合起來。我正在避免傳統的「反」增量來訪問數組,因爲有一個更優雅的'pythonic'解決方案。

+3

避免顯式計數器的Pythonic方法是'enumerate'。但是列舉詞典項目的順序是不確定的。 –

回答

1

我沒有看到任何的優勢,這裏使用numpy,因爲你迭代一個常規的Python列表(值())。我只是做一個列表理解,並稍後將其轉換爲數組。你的數組也是1d。當使用多維對象時(與簡單列表相反),使用numpy時會發光。

list_answer = [item.CalculateDutyCycle() * 100.0 for item in self.dictTable.values()] 
newTable = np.array(list_answer) 
3

如果您使用enumerate,則不必明確增加計數器。你可以這樣做:

newTable = numpy.zeros(self.numObj) 
for k, item in enumerate(self.dictTable.values()): 
    newTable[k] = item.CalculateDutyCycle() * 100.0