Я пытаюсь проверить, сколько элементов в одном массиве 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
Векторизация поиска совпадений между массивами numpy ⇐ Python
Программы на Python
-
Anonymous
1767792929
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
Подробнее здесь: [url]https://stackoverflow.com/questions/79862438/vectorise-coincidences-lookup-between-numpy-arrays[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия