Сохранение списка строк в наборе данных HDF5 из Python в формате VL - PullRequest
1 голос
/ 21 марта 2019

Я ожидал, что следующий код будет работать, но это не так.

import h5py
import numpy as np

with h5py.File('file.hdf5','w') as hf:
    dt = h5py.special_dtype(vlen=str)
    feature_names = np.array(['a', 'b', 'c'])
    hf.create_dataset('feature names', data=feature_names, dtype=dt)

Я получаю сообщение об ошибке TypeError: No conversion path for dtype: dtype('<U1'). Следующий код работает, но использование цикла for для копирования данных кажется мне немного неуклюжим. Есть ли более простой способ сделать это? Я бы предпочел иметь возможность передавать последовательность строк непосредственно в функцию create_dataset.

import h5py
import numpy as np

with h5py.File('file.hdf5','w') as hf:
    dt = h5py.special_dtype(vlen=str)
    feature_names = np.array(['a', 'b', 'c'])
    ds = hf.create_dataset('feature names', (len(feature_names),), dtype=dt)

    for i in range(len(feature_names)):
        ds[i] = feature_names[i]

Примечание: мой вопрос следует из этого ответа до Сохранение списка строк в наборе данных HDF5 из Python , но я не считаю его дубликатом этого вопроса.

1 Ответ

1 голос
/ 03 июля 2019

Вы почти сделали это, недостающие детали должны были передать dtype в np.array:

import h5py                                                                                                                                                                                                
import numpy as np            

with h5py.File('file.hdf5','w') as hf: 
     dt = h5py.special_dtype(vlen=str) 
     feature_names = np.array(['a', 'b', 'c'], dtype=dt) 
     hf.create_dataset('feature names', data=feature_names)

PS: для меня это похоже на ошибку - create_dataset игнорирует данное dtypeи не применять его к данному data.

...