дубликата одномерного массива в двумерном массиве размером скажем 2-3 ГБ (каждая строка двумерного - это сравниваемый массив с заданным)?
Звучит как задача для faiss. Сам с ней не работал, цифры не смогу подсказать, но кажется должно быть достаточно быстро
А хотя бы примерно - достаточно быстро - это сколько? )))
а он точно есть? или может не быть?
Может не быть)
А если без? Чисто numpy?
если сначала создать для каждого одномерного массива хэш, и построить map в котором ключи будут хэшами, а значениями - списки ссылок на одномерным массивы с таким хэшом - то за О(1)
Блин, не все так просто. Если дубликатов нет, то надо входной массив записать в проверяемый )))
https://medium.com/gsi-technology/ann-benchmarks-a-data-scientists-journey-to-billion-scale-performance-db191f043a27 Но faiss вообще-то решает немного другую задачу. Кстати, размер строчки фиксирован? Если нет, faiss не подойдёт.
А вот как хочешь)) Поискал дубликаты - не нашел, записал одномерный в двумерный. Я пока через row_stack дописываю. Получил на вход новый - опять ищешь уже в расширенном.
а в чем проблема добавить в map новый массив?)
Пока чет не соображу. Одномерный массив генерится случайным образом с заданной размерностью, и подается на вход функции поиска дубликатов, если дубликата нет, то дописывается в массив. Потом новый случайный генерится. И т.д.
Я походу неверно сформулировал вопрос. В общем, есть пустой массив. Подаем в функцию одномерный массив, если начальный массив пустой - то записываем в него входной, если нет, то сравниваем с ранее записанными массивами, если есть дубликат - пропускаем, если нету - записываем входной, т.е. по факту формируем двумерный массив. Все это повторяем, пока начальный массив не достигнет некоторого объема - пусть 3 гигабайта. Вот такая операция сколько может допустимо занимать времени? Хотя бы примерно?
Да тестовое решаю и хочу понять насколько приемлемые у меня результаты ))
В общем, при входном массиве в 5000000 элементов, догоняет наполняемый до 3 ГБ с поиском дублей и дозаписью + записью в файл в конце, с такими показателями: 541750 function calls (540634 primitive calls) in 445.176 seconds Т.е. за 7 с половиной минут. Насколько это норм? Само собой при меньшем входном массиве это еще дольше - пока три гига наберет...
Обсуждают сегодня