215 похожих чатов

Коллеги, подскажите, если был опыт, какое приемлемое время для поиска

дубликата одномерного массива в двумерном массиве размером скажем 2-3 ГБ (каждая строка двумерного - это сравниваемый массив с заданным)?

16 ответов

10 просмотров

Звучит как задача для faiss. Сам с ней не работал, цифры не смогу подсказать, но кажется должно быть достаточно быстро

Oleg Shapovalov
Звучит как задача для faiss. Сам с ней не работал,...

А хотя бы примерно - достаточно быстро - это сколько? )))

а он точно есть? или может не быть?

А если без? Чисто numpy?

если сначала создать для каждого одномерного массива хэш, и построить map в котором ключи будут хэшами, а значениями - списки ссылок на одномерным массивы с таким хэшом - то за О(1)

Roman Ralovets
если сначала создать для каждого одномерного масси...

Блин, не все так просто. Если дубликатов нет, то надо входной массив записать в проверяемый )))

Алексей Крапивницкий
А хотя бы примерно - достаточно быстро - это сколь...

https://medium.com/gsi-technology/ann-benchmarks-a-data-scientists-journey-to-billion-scale-performance-db191f043a27 Но faiss вообще-то решает немного другую задачу. Кстати, размер строчки фиксирован? Если нет, faiss не подойдёт.

Roman Ralovets
это как?

А вот как хочешь)) Поискал дубликаты - не нашел, записал одномерный в двумерный. Я пока через row_stack дописываю. Получил на вход новый - опять ищешь уже в расширенном.

Roman Ralovets
а в чем проблема добавить в map новый массив?)

Пока чет не соображу. Одномерный массив генерится случайным образом с заданной размерностью, и подается на вход функции поиска дубликатов, если дубликата нет, то дописывается в массив. Потом новый случайный генерится. И т.д.

Я походу неверно сформулировал вопрос. В общем, есть пустой массив. Подаем в функцию одномерный массив, если начальный массив пустой - то записываем в него входной, если нет, то сравниваем с ранее записанными массивами, если есть дубликат - пропускаем, если нету - записываем входной, т.е. по факту формируем двумерный массив. Все это повторяем, пока начальный массив не достигнет некоторого объема - пусть 3 гигабайта. Вот такая операция сколько может допустимо занимать времени? Хотя бы примерно?

Да тестовое решаю и хочу понять насколько приемлемые у меня результаты ))

Алексей Крапивницкий
Да тестовое решаю и хочу понять насколько приемлем...

В общем, при входном массиве в 5000000 элементов, догоняет наполняемый до 3 ГБ с поиском дублей и дозаписью + записью в файл в конце, с такими показателями: 541750 function calls (540634 primitive calls) in 445.176 seconds Т.е. за 7 с половиной минут. Насколько это норм? Само собой при меньшем входном массиве это еще дольше - пока три гига наберет...

Похожие вопросы

Обсуждают сегодня

30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
13
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
Как передать управляющий символ в открытую через CreateProcess консоль? Собсна, есть процедура: procedure TRedirectThread.WriteData(Data: OEMString); var Written: Cardinal;...
Serjone
6
в JclConsole объявлено так: function CtrlHandler(CtrlType: DWORD): BOOL; stdcall; - где ваше объявление с stdcall? у вас на картинке нет stdcall
Karagy
8
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
program test; {$mode delphi} procedure proc(v: int32); overload; begin end; procedure proc(v: int64); overload; begin end; var x: uint64; begin proc(x); end. Уж не знаю...
notme
6
Карта сайта