W moim skrypcie tworzę kilka danych zbiorów danych ręcznie:

    import tables
    dset1 = f.create_earray(f.root, "dataset1", atom=tables.Float64Atom(), shape=(0, 2))
    dset2 = f.create_earray(f.root, "dataset2", atom=tables.Float64Atom(), shape=(0, 2))
    dset3 = f.create_earray(f.root, "dataset3", atom=tables.Float64Atom(), shape=(0, 2))
    ...

Chcę osiągnąć dwie rzeczy:

  1. Zautomatyzuj powyższe stwierdzenia, aby wykonać w modzie pętli i utwórz dowolne żądane (n) zestawy danych

  2. Następnie korzystam z metody .append sekwencyjnie (jak podano poniżej), które również chcę zautomatyzować:

     dset1.append(np_array1) 
     dset2.append(np_array2) 
     dset3.append(np_array3) 
     ...
    

Doceni każdą pomoc?

0
nuki 17 październik 2020, 02:19

1 odpowiedź

Najlepsza odpowiedź

Trudno podać konkretną radę bez więcej szczegółów. Jeśli masz już tablicę numery, możesz utworzyć zęba z danymi w jednym połączeniu (za pomocą parametru obj=). Oto mały fragment kodu, który pokazuje, jak to zrobić w pętli.

import tables as tb
import numpy as np

with tb.File('SO_64397597.h5','w') as h5f:
    
    arr1  = np.ones((10,2))
    arr2  = 2.*np.ones((10,2))
    arr3  = 3.*np.ones((10,2))
    arr_list = [arr1, arr2, arr3]
    for cnt in range(1,4):
        h5f.create_earray("/", "dataset"+str(cnt), obj=arr_list[cnt-1])

Powyższy kod nie tworzy obiektów danych. Jeśli ich potrzebujesz, możesz uzyskać dostęp do programowo z tym połączeniem:

# input where as path to node, name not required
ds = h5f.get_node("/dataset1")
# or
# input where as path to group, and name as dataset name
ds = h5f.get_node("/","dataset1") 

Jeśli nie masz tablic, gdy utworzysz zestawy danych, możesz utworzyć earrays w pierwszej pętli, a następnie dodać dane NP.ARray w drugiej pętli. Patrz poniżej:

with tb.File('SO_64397597.h5','w') as h5f:
    
    for cnt in range(1,4):
        h5f.create_earray("/", "dataset"+str(cnt), atom=tables.Float64Atom(), shape=(0, 2))

        # get array data...
        arr_list = [arr1, arr2, arr3]
        # add array data
        for cnt in range(1,4):
            h5f.get_node("/","dataset"+str(cnt)).append(arr_list[cnt-1]) 
1
kcw78 23 październik 2020, 20:20