Какой алгоритм использует больше памяти?
Есть два двумерных массива numpy (заведомо огромных). Необходимо вывести двумерный массив (два столбца и N строк) пар индексов строк, значения в первых 5ти элементов которых совпадают в обоих массивах. Например:
array1 = np.array([
[1, 4, 3, 6, 2, 6, 2, 5],
[7, 3, 5, 2, 4, 6, 7, 2],
[3, 3, 6, 2, 1, 6, 8, 4],
[1, 6, 3, 8, 6, 8, 4, 2],
])
array2 = np.array([
[6, 2, 4, 1, 6, 4, 2, 2],
[1, 4, 3, 6, 2, 6, 2, 5],
[1, 6, 3, 8, 6, 8, 4, 2],
[5, 3, 1, 5, 2, 6, 3, 2],
])
result = np.array([
[0, 1],
[3, 2],
])
Есть два варианта реализации
- который жрет много памяти:
matches = np.array(np.all((np.round(array1[:,:6], decimals=4)[:, None, :] == np.round(array2[:,:6], decimals=4)[None, :, :]), axis=-1).nonzero()).T
- который долгий:
matches = np.array([])
for i in range(array1.shape[0]):
correspond_map = np.all((np.round(array1[i, :6], decimals=4) == np.round(array2[:,:6], decimals=4)), axis=-1)
idx = np.where(correspond_map)[0]
if idx.shape[0] != 0:
if matches.shape[0] != 0:
matches = np.vstack((matches, np.array([i, idx[0]])))
else:
matches = np.array([i, idx[0]])
я хочу получить количественно (чтоб графики построить) сколько памяти потребляет каждый алгоритм, но пока не нашел решения, как именно. Memory profiler дает какую то дичь, либо я не понял как им пользоваться правильно.