2013-10-07 5 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

명시 적 카운터를 피하는 Python 방식은'열거 형 '입니다. 그러나 사전 항목의 열거 순서는 불확실합니다. –

답변

1

(값()). 목록 작성법을 수행하고 나중에 배열로 변환합니다. 또한 배열은 1d입니다. numpy은 다차원 객체로 작업 할 때 (단순 목록과 대조적으로) 빛을 발합니다.

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

enumerate을 사용하는 경우 명시 적으로 카운터를 늘릴 필요가 없습니다. 당신은 무언가 같이 할 수 있습니다 : 당신이 정기적으로 파이썬 목록 반복하기 때문에, 내가 여기 numpy를 사용하여 어떤 이점을 볼 수 없습니다

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