2013-10-07 3 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, но не был уверен, как объединить этот итератор со итерацией таблицы словарей. Я избегал традиционного приращения счетчика для доступа к массиву, есть более элегантное «питоновское» решение.

+3

Pythonic способ избежать явных счетчиков - это «перечислить». Но порядок перечисления слов словаря неопределен. –

ответ

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 
Смежные вопросы