проблемы с носителями в python - PullRequest
0 голосов
/ 29 декабря 2011

У меня есть этот код:

import numpy as np
import tables as tb

ndim = 50000
h5in = tb.openFile('data.h5','r')
data = h5in.root.x

h5out = tb.openFile('testout.h5', mode='w', title="argsort distances")
root = h5out.root
x = h5out.createCArray(root,'x',tb.Int16Atom(),shape=(ndim,ndim))

for i in xrange(ndim):
    x[:,i] = np.argsort(dist[i,:])

Это просто требует выполнения вечности.Есть ли способ ускорить это?

Примечание: должно быть x [:, i], а не x [i,:]

Ответы [ 2 ]

1 голос
/ 29 декабря 2011

Замените цикл for на:

x[:,:] = np.argsort(dist, axis=1).T 

ОБНОВЛЕНИЕ : если оно слишком велико, попробуйте найти компромисс в размере срезов:

slice_size = 100 # or 1000 if it fits into your memory
for i in xrange(0, ndim, slice_size):
    x[:,i:i+slice_size] = np.argsort(dist[i:i+slice_size,:], axis=1)
0 голосов
/ 30 декабря 2011

Вы пытаетесь загрузить файл с данными в виде строк?

, если да, попробуйте np.loadtxt

...