2014-09-01 1 views
0

10 열 및 100000 행을 가진 간단한 HDF5 파일 (PyTables로 작성)이 있습니다. 모든 값에 대해 열마다 다른 매개 변수를 사용하여 간단한 선형 방정식을 적용하고 CSV에 내용을 써야합니다.전체 열 (pytables, hdf5, numpy)에 대한 효율적인 계산

내 순진 방법은 테이블을 통해 루프이었다

for row in table.iterrows(): 
    print "%f,%f,..." % (row['a'] * 1.0 + 2.0, row['b'] * 3.0 + 4.0, ...) 

그러나 나는 열을 선택하고 그들에게 그런 식으로 계산하고 나중에 결과 배열을 반복하는 것이 더 효율적이 될 것인지, 궁금 :

a = numpy.add(numpy.multiply(table.cols.a, 1.0), 2.0) 
b = numpy.add(numpy.multiply(table.cols.b, 3.0), 4.0) 

그러나 이것은 훨씬 느립니다.

가장 좋은 방법은 무엇입니까?

답변

1

성능은 CSV 작성으로 인해 제한 될 수 있지만 그 외의 문제는 바로 numexpr의 문제입니다.

Expr.set_output 메서드를 사용하여 결과를 반복하고 CSV에 직접 쓰는 대신 결과를 hdf5에 다시 쓰고이 결과 열을 하나의 최적화 된 형식으로 CSV로 변환하는보다 효율적인 방법을 찾아 볼 수 있습니다 요구; 퍼포먼스가 정말로 중요한 관심사라면 그것을 사용하는 것이별로 의미가 없기 때문에 CSV를 없애는 방법을 찾으십시오.

+0

PyTables 초보자로서이 기능에 대해 들어 본 적이 없기 때문에 많은 감사드립니다. 빠른 검사에서 이것은 약 3 분의 1 (약 400ms)의 iterrows (~ 600ms)를 사용하는 것보다 빠릅니다! 시원한! numpy 방식은 너무 느려서 몇 분 후에 중단되었습니다. –