Векторизация поиска совпадений между массивами numpyPython

Программы на Python
Ответить
Anonymous
 Векторизация поиска совпадений между массивами numpy

Сообщение Anonymous »

Я пытаюсь проверить, сколько элементов в одном массиве numpy можно найти с определенным допуском внутри другого массива numpy. На данный момент я использую цикл for для применения своей логики сравнения, однако я подозреваю, что существует элегантное решение, использующее векторизованный подход.
Массивы numpy имеют следующую структуру:
ch1 = array([ 41, 53, 95, ..., 1180949, 1181054, 1181081], shape=(N,))

ch2 = array([ 85, 221, 94, ..., 1180996, 1181055, 1181087], shape=(M,)))

где N и M могут быть большими числами (и не обязательно равными), а записи монотонно увеличиваются.
Я пытаюсь подсчитать элементы ch1, которые отличаются от элементов ch2 на 1. Чтобы привести пример, учитывая приведенные выше массивы, элемент 95 ch1 отличается на 1 от элемента 94 ch2, поэтому мы считаем, что вход. То же самое относится к записи 1181054 из ch1 и записи 1181055 из ch2.
Проблема, с которой я столкнулся, заключается в том, что, поскольку два массива не обязательно имеют одинаковую форму, я не могу просто выполнить (ch1 - ch2) или (ch2 - ch1), поскольку это приведет к ошибке. До сих пор я использовал цикл for для записей ch1/ch2, определял разницу между этим значением и другим массивом и подсчитывал запись, если элемент удовлетворяет логике (ниже вы можете найти фрагмент кода, который я сделал).
Есть ли способ векторизовать этот цикл, поскольку это сравнение между двумя массивами должно быть реализовано между тысячами пар массивов, и это будет означать нечто большее, чем 100 000 итераций.

counter = 0

for elm in ch1:
t_diff = elm - ch2
found, = np.nonzero(numpy.abs(t_diff) 0:
counter += 1


Подробнее здесь: https://stackoverflow.com/questions/798 ... mpy-arrays
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»