Numpy широковещательное побитовое объединение без побитового пересечения

Я пишу алгоритм, который имеет общий сценарий. У меня есть два больших массива целых чисел. Назовите их 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]

Вопрос 1

Действительно ли этот метод эффективен? Мой алгоритм в основном основан на этой операции прямо здесь, поэтому будет очень важно знать, как это сделать лучше всего.

вопрос 2

Для каждых двух массивов я хочу вывести все результаты в один 1d-массив. Как мы видим, с помощью описанного выше метода я выводил данные в разные массивы. Я полагаю, что могу использовать какой-то метод конкатенации, но я также подозреваю, основываясь на том немногое, что я знаю о массивах, что это может занять относительно много времени. Я мог бы использовать несколько советов о том, как сделать это эффективно.

Спасибо.

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
0
117
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вопрос 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]

Другие вопросы по теме