2012-01-12 35 views
16

PyTables kullanarak bir HDF5 dosyasında çok boyutlu çok boyutlu bir diziyi nasıl yerleştirebilirim?Python: PyTables'ta çok boyutlu çok boyutlu bir dizinin saklanması nasıl yapılır?

Anlatabildiğim kadarıyla piliç tablosuna dizi alanı koyamıyorum.

Bu diziyle ilgili bazı bilgileri de kaydetmem ve üzerinde matematiksel hesaplamalar yapabilmem gerekir.

Herhangi bir öneriniz var mı?

+8

diziyi kabul edebilir. 'F.create_dataset '(' name ', data = x)' '' '' 'num' 'numpy diziniz ve' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' '' dır. Aynı şeyi "piliç" lerde yapmak mümkündür, ancak oldukça daha zor. –

+0

Joe, +1. Neredeyse aynı bir yorumu yayınlamak üzereydim. –

+0

Bunu düşündüm ama piller diziler üzerinde doğrudan hesaplama yapmak için bazı özelliklere (tables.expr) sahiptir, bunu h5py ile alabilir miyim? – scripts

cevap

32

daha basit bir yolu olabilir, ama bu bildiğim kadarıyla, bunu yaparken hakkında gitmek istiyorum nasıl: Kullanmak sıkıştırma belirtmek isterseniz,

import numpy as np 
import tables 

# Generate some data 
x = np.random.random((100,100,100)) 

# Store "x" in a chunked array... 
f = tables.openFile('test.hdf', 'w') 
atom = tables.Atom.from_dtype(x.dtype) 
ds = f.createCArray(f.root, 'somename', atom, x.shape) 
ds[:] = x 
f.close() 

bir göz at var tables.Filters. Örneğin.

import numpy as np 
import tables 

# Generate some data 
x = np.random.random((100,100,100)) 

# Store "x" in a chunked array with level 5 BLOSC compression... 
f = tables.openFile('test.hdf', 'w') 
atom = tables.Atom.from_dtype(x.dtype) 
filters = tables.Filters(complib='blosc', complevel=5) 
ds = f.createCArray(f.root, 'somename', atom, x.shape, filters=filters) 
ds[:] = x 
f.close() 

Ben uzun süredir tablo benzeri veri dışında herhangi pytables kullanmadım ... muhtemelen bu bir sürü için daha basit bir yolu var.

Not: pytables 3.0 ile, f.createCArrayf.create_carray olarak yeniden adlandırıldı. Eğer sadece düz ND diziler kadar, bunun yerine pytables` `ait h5py`` ile daha iyiyiz çok depolamak eğer Ayrıca, Dürüst, atom belirtmeden doğrudan

f.create_carray('/', 'somename', obj=x, filters=filters) 
+0

sayesinde daha uygundur çünkü kusursuz çalıştı! – scripts

+5

Not: http://pytables.github.io/usersguide/tutorials.html adresindeki 'Yeni dizi nesneleri oluşturma' bölümünde açıklandığı gibi, bu durum artık dosya nesnelerindeki create_array yöntemini kullanarak çok daha kolay bir şekilde yapılabilir. –