Эффективное объединение двух больших булевых списков

Рейтинг: 0Ответов: 2Опубликовано: 20.04.2023

Имеется два двумерных больших списка, содержащих True или False, например:

arr1 = [[False,True,False,True,False,False],[False,True,True,True,False,False]...]
arr2 = [[False,False,True,False,True,False],[True,False,True,True,True,False]...]

На выходе должно получиться:

arr = [[False,True,True,True,True,False],True,True,True,True,True,False]...]

В алгоритме важна скорость, поэтому перебор через обычный цикл for не подходит. Есть ли какие-то библиотеки или встроенные функции которые могут это сделать быстрее цикла for?

Ответы

▲ 3

Ну используйте numpy. Но тогда хорошо бы, чтобы сами данные уже были сразу в его формате, иначе много времени потратится на преобразование и не факт, что будет выигрыш:

import numpy as np

n = 10_000_000
k = 10
arr1 = np.random.choice([True, False], (n, k))
arr2 = np.random.choice([True, False], (n, k))
arr3 = arr1 | arr2
▲ 0

Решение было найдено, с помощью numpy и функции np.logical_or(arr1,arr2)