Я сейчас пишу код для колледжа, который работает с очень большими объемами данных, используя Pytables с различными матрицами / матрицами, чтобы не переполнять память, и до сих пор он работал хорошо.
Правильнотеперь мне нужно присвоить целочисленный идентификатор (от 0 до любого) ряду различных строк, сохранить назначение и иметь возможность получить соответствующее целое число для определенной строки и наоборот.Конечно, обычные типы не обрезают его, просто слишком много строк, поэтому мне нужно использовать что-то, что работает с файлами, такими как Pytables.
Я думал просто об использовании одномерного массива Pytables EArray (потому что я могу 'не знаю, сколько будет строк), сохраните там строки и пусть индекс для каждого элемента будет назначенным целочисленным идентификатором строки.
Это пример того, что я подумал использовать:
import tables as tb, numpy as np
>>>file = tb.open_file("sample_file.hdf5", mode='w')
>>>sample_array = file.create_earray(file.root, 'data', tb.StringAtom(itemsize=50),
shape=(0,), expectedrows=10000)
>>>sample_array.append(np.array(["String_value"]))
Таким образом, я могу получить значение String данного целого числа, как в любом обычном массиве
>>>sample_array[0]
b'String_value'
Но я не могу на всю жизнь узнать, как это сделатьнапротив, чтобы найти индекс для данной строки, я только придумываю более абсурдные способы делать дерьмо ...
>>> sample_array[np.where("String_value") in sample_array]
b'String_value'
>>> sample_array[np.where("String_value")]
array([b'String_value'], dtype='|S50')
>>> np.where("String_value") in sample_array
False
Заранее спасибо!
РЕДАКТИРОВАТЬ:
Забыл обновить, я понял это, работая над чем-то другим ... Лицом к лицу сильно, очень тяжело, это было действительно глупо, но я не мог понять, что случилось часами.
np.where(sample_array[:] == b'String_value')
>>>(array([0]),)