2014-04-22 8 views
5

Wie können Sie nach dem Erstellen eines h5py dataset bestimmte Zeilen oder Spalten aus einem NxM-Array hinzufügen oder entfernen?Hinzufügen oder Entfernen bestimmter Zeilen oder Spalten in einem h5py-Dataset

Meine Frage ist ähnlich wie this one, aber ich möchte nicht blind verkürzen oder das Array erweitern. Beim Entfernen muss ich die genaue zu entfernende Zeile oder Spalte angeben können.

Zum hinzufügen, ich weiß, ich muss angeben, maxshape=(None, None) beim Erstellen der ursprünglichen Daten, aber die resize Methode scheint nicht zu bestimmen, welche Zeilen oder Spalten abgeschnitten werden, wenn Sie die Größe verkleinern.

Antwort

5

h5py ist nicht wirklich dafür gedacht. könnte eine bessere Bibliothek sein, da es um das Konzept der Tabellen herum aufgebaut ist.

Having said that, ist hier, wie es geht:

In [1]: f = h5py.File('test.h5') 

In [2]: arr = rand(4,4) 

In [3]: dset = f.create_dataset('foo',data=arr,maxshape=(2000,2000)) 

In [4]: dset[:] 
Out[4]: 
array([[ 0.29732874, 0.59310285, 0.61116263, 0.79950116], 
     [ 0.4194363 , 0.4691813 , 0.95648712, 0.56120731], 
     [ 0.76868585, 0.07556214, 0.39854704, 0.73415885], 
     [ 0.0919063 , 0.0420656 , 0.35082375, 0.62565894]]) 

In [5]: dset[1:-1,:] = dset[2:,:] 

In [6]: dset.resize((3,4)) 

In [7]: dset[:] 
Out[7]: 
array([[ 0.29732874, 0.59310285, 0.61116263, 0.79950116], 
     [ 0.76868585, 0.07556214, 0.39854704, 0.73415885], 
     [ 0.0919063 , 0.0420656 , 0.35082375, 0.62565894]]) 

Diese Spalte 1 von dset entfernt. Dazu werden die Spalten 2 und 3 jeweils 1 und 2 zugewiesen, bevor der Datensatz um eine Spalte verkleinert wird. Tauschen Sie die Indizes aus, um Zeile 1 zu entfernen. Sie können leicht einen Wrapper dafür schreiben, wenn Sie viel tun.