Я пишу алгоритм, который имеет общий сценарий. У меня есть два больших массива целых чисел. Назовите их k и j (потому что именно так я назвал их в своем тестовом коде).
Я беру каждый элемент k и объединяю его с каждым элементом j, НО ТОЛЬКО ЕСЛИ пересечение двух элементов равно нулю.
Пример:
j = np.zeros(3, dtype=int)
k = np.zeros(3, dtype=int)
k[0] = 2
k[1] = 6
k[2] = 10
j[0] = 2
j[1] = 8
j[2] = 1
for i in xrange(3):
mask = (j&k[i] == 0)
nextpart = (j|k[i])[mask]
print i, nextpart
print ""
0 [10 3]
1 [14 7]
2 [11]
Действительно ли этот метод эффективен? Мой алгоритм в основном основан на этой операции прямо здесь, поэтому будет очень важно знать, как это сделать лучше всего.
Для каждых двух массивов я хочу вывести все результаты в один 1d-массив. Как мы видим, с помощью описанного выше метода я выводил данные в разные массивы. Я полагаю, что могу использовать какой-то метод конкатенации, но я также подозреваю, основываясь на том немногое, что я знаю о массивах, что это может занять относительно много времени. Я мог бы использовать несколько советов о том, как сделать это эффективно.
Спасибо.
Вопрос 2 немного сбивает с толку. В любом случае вы можете сделать $ и | Операции эффективно с использованием вещания.
import numpy as np
j = np.zeros(3, dtype=int)
k = np.zeros(3, dtype=int)
k[0] = 2
k[1] = 6
k[2] = 10
j[0] = 2
j[1] = 8
j[2] = 1
# alter shape to broadcast
k_ = k[None].T
r = (j|k_)[j&k_==0]
print(r)
Это приводит к
[10 3 14 7 11]