Я пытаюсь определить, являются ли два значения, содержащиеся в разных объектах numpy orderdict, одинаковыми.
Оба словаря были созданы с помощью опции fetchallnumpy()
в turbodbc
и состоят из двух ключей.Первый ключ - это поле id, второй ключ - строковое значение переменной длины.Я хочу посмотреть, присутствует ли строковое значение в первом наборе элементов словаря во втором наборе элементов словаря.
Вероятно, стоит отметить, что оба объекта словаря содержат приблизительно 60 миллионов значений под каждым ключом.
Я уже пробовал несколько вещей: -
np.isin(dict1[str_col],dict2[str_col])
Как функция, но это было чрезвычайномедленно, предположительно, потому что строковые значения хранятся как dtype
объект.
Я пытался преобразовать оба объекта с диктационными значениями в numpy
массивы с явным строковым типом как np.asarray(dict1[str_col], dtype='S500')
затем попытался использовать функции isin
и in1d
.В этот момент системе не хватает оперативной памяти.Поменял S500 на dtype=np.string_
, но все равно получил MemoryError
.(ar=np.concatenate((ar1,ar2)))
при выполнении функции isin
.
Я также попробовал цикл for.
[r in dict2[str_col] for r in dict1[str_col]]
Опять же, это было очень медленно.
Моя цель - сравнительно быстрый способ тестирования двух струн.столбцы без исчерпания памяти.
Дополнительные биты В долгосрочной перспективе я буду выполнять более одной проверки, поскольку я пытаюсь определить> новые значения и значения, которыебыли изменены.
Словарь A = Текущие данные ['ID': [int, int, int]] Словарь B = Исторические данные ['record': [str, str, str]]
Так чтоИнтересующие меня биты: -
- A! = B (текущая запись отличается от исторической записи)
- A отсутствует в B (новая запись добавлена в базу данных)
- B отсутствует в A (записи должны быть отредактированы)
Последние два элемента, самый быстрый способ, который я обнаружил, - это передача столбцов id в функциюкоторый содержит np.isin (arr1, arr2).Сравнивает данные в среднем 15 секунд.