Matlab'dan gelen python'a yeniyim. Matlab v7.3 (HDF5) formatında kaydedilmiş büyük bir seyrek matrisim var. Şu ana kadar, dosyada h5py
ve tables
kullanarak iki yükleme yolu buldum. Ancak matris üzerinde çalışmak her ikisinden sonra da oldukça yavaş görünüyor.Yükleme Matlab seyrek matrisi, -v7.3 (HDF5) ile Python'a kaydedildi ve üzerinde çalışıyor
>> whos
Name Size Bytes Class Attributes
M 11337x133338 77124408 double sparse
>> tic, sum(M(:)); toc
Elapsed time is 0.086233 seconds.
kullanma masaları: Örneğin, Matlab'de
t = time.time()
sum(f.root.M.data)
elapsed = time.time() - t
print elapsed
35.929461956
h5py kullanma:
t = time.time()
sum(f["M"]["data"])
elapsed = time.time() - t
print elapsed
(ı bekleyen verdi ...)
[DÜZENLE]
Yorumları dayanarak
from scipy import sparse
A = sparse.csc_matrix((f["M"]["data"], f["M"]["ir"], f["tfidf"]["jc"]))
veya
data = numpy.asarray(f["M"]["data"])
ir = numpy.asarray(f["M"]["ir"])
jc = numpy.asarray(f["M"]["jc"])
A = sparse.coo_matrix(data, (ir, jc))
: @bpgergo, ben bir
numpy
dizi ya da aşağıdaki iki yolla bir
scipy
seyrek diziye
h5py
(
f
) tarafından yüklenen neticenin denediğinizden eklemek gerekir
ancak bu işlemlerin ikisi de oldukça yavaştır.
Burada eksik olduğum bir şey var mı?
(yani o oluyorimport tables, warnings
from scipy import sparse
def load_sparse_matrix(fname) :
warnings.simplefilter("ignore", UserWarning)
f = tables.openFile(fname)
M = sparse.csc_matrix((f.root.M.data[...], f.root.M.ir[...], f.root.M.jc[...]))
f.close()
return M
Dosyayı yüklemek, Matlab'da (<1sn) neredeyse anlık olarak yapıldı, bu yüzden karşılaştırmanın adil olduğunu düşünüyorum, ancak yerleşik toplam işlevle ilgili noktanızı alıyorum. Ben daha fazla insan yapıyorum ne yapıyor olacağım (Matlab'dan Python'a taşınıyor) bu yüzden Matlab dosyalarında IMHO ... – tdc
yükleme için biraz daha fazla destek olsaydı iyi olurdu. Dosyanız olmadan test edin, ancak aslında diziyi python'a yüklemek çok hızlı olmalıdır. Şu anda yapmakta olduğunuz şey aslında onu yüklemiyor. Etkin olarak bellek eşlemeli bir dizinin ne olduğunu yineler. Bağımsız olarak erişmek, çoğu diskte olduğu gibi herhangi bir dilde çok yavaş olacaktır. Yukarıdaki örnek kod hala yavaş mı? Ayrıca, ben değilim scipy.io.loadmat' http://docs.scipy.org/doc/scipy/reference/generated/scipy.io.loadmat.html#scipy.io.loadmat, bir göz var seyrek dizileri destekliyorsa emin olun. –
henüz deneme şansı bulamadı ama giriş için teşekkürler – tdc