Я создал массив 127,545 x 1,234,620 с помощью np.memmap (я называю это характеристической матрицей).Если моя математика верна (127 545 1 234 620 4/8/1 000 000 000), мой массив должен составлять 78,73 ГБ при 4 битах на ячейку.Однако, если посмотреть на его свойства, он составляет 586 ГБ.Я определенно что-то здесь упускаю.Тем не менее, я просто рад, что это сработало, и теперь оно было создано.Создание заняло около 2 часов.
В любом случае мне нужно заполнить его сейчас, и я смертельно боюсь, сколько времени потребуется, чтобы сделать это.По сути, у меня есть уникальное целое число, которое представляет каждую из строк (таким образом, 127 545 целых чисел хранятся в множестве ()) и набор целых чисел, представляющих каждый столбец (таким образом, 1 234 620 наборов целых чисел хранятся в словаре).Если целое число строки находится в наборе целых чисел столбца, то ячейка строки / столбца получает 1, в противном случае 0.
Хотелось бы получить несколько советов о том, как сделать это максимально эффективно.
Код для создания массива:
import numpy as np
nrows, ncols = 127545, 1234620
char_array = np.memmap(r"H:\Python\chararray.dat", dtype=np.float32, mode='w+', shape=(nrows, ncols))
Текущий код для заполнения:
s=0
for shingle_set in make_shingle_sets.values(): # the sets of values in the dictionary
r=0
for row in universal_shingle_set: # the set() of unique integers representing the rows
if row in shingle_set:
characteristic_matrix[r,s] = 1
r+=1
s+=1