2016-10-04 14 views
0

У меня есть большой CArray целых чисел в PyTables (1 миллион строк, 50000 столбцов):Fast ломтиков столбцов в PyTables

In [22]: fmat 
Out[22]: 
/fmat (CArray(1025461, 54123), shuffle, blosc(5)) '' 
    atom := Int32Atom(shape=(), dflt=0) 
    maindim := 0 
    flavor := 'numpy' 
    byteorder := 'little' 
    chunkshape := (9, 54123) 

Выбор строки в порядке:

In [24]: %timeit fmat[0] 
10000 loops, best of 3: 46.5 µs per loop 

Но выбора столбцов принимает навсегда :

In [25]: %timeit fmat[:,0] 
1 loop, best of 3: 25 s per loop 

Есть ли эффективный способ индексирования столбцов или транспонирования массива, чтобы позволить быстрые срезы?

ответ

0

Ответ при создании массива отвечает в параметре chunkshape.

Если нужны только срезы столбцов, просто установите столбец как chunkshape. Например, для матрицы NxP (N строк и столбцов P) выберите:

fmat = f.create_carray(f.root, 'fmat', tb.Int32Atom(), shape=(N, P), filters=filters, chunkshape=[N,1])

 Смежные вопросы

  • Нет связанных вопросов^_^