2011-12-29 2 views
0

У меня есть этот код:проблем с carrays в питоне

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,:]) 

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

Примечание: Это должно быть х [:, я], а не х [г ,:]

ответ

1

Заменить для цикла с:

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

UPDATE: Если это является слишком большим, затем попытаться найти компромисс в размере ломтиков:

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

Это дает ошибку памяти. Вот почему я использовал цикл – Academia

+0

@ user1038382 - возможно, вы могли бы попытаться работать на срезах ... см. Мой обновленный ответ – eumiro

+0

, если вы используете 'slice_size', тогда возвращаемые значения' np.argsort() 'должны быть скорректированы. – jfs

0

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

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

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