Уведомления

Группа в Telegram: @pythonsu

#1 Март 10, 2011 20:51:19

voltron
От:
Зарегистрирован: 2009-04-23
Сообщения: 31
Репутация: +  2  -
Профиль   Отправить e-mail  

Сравнение чисел по "маске"

Есть 2-мерный массив NumPy, числа в массиве одного порядка и состоят из комбинаций 1 и 2. Например

2221 2222 2222 2222 1112
2222 2222 1211 2111 1122
2122 1221 2212 1222 1111
И есть “маски”. Это тоже числа, количество цифр в этих числах не может превышать количество цифр в числах массива. Маска может содержать 0, 1 и 2, и показывает чему должны быть равны определенные разряды чисел массива (0 означает, что значение разряда не важно). Примеры масок: 2002, 11, 121, 221. Т.е. маска 2002 означает, что самый старший и самый младший разряды должны быть равны 2, этой маске соответствуют числа 2222, 2112, 2212, 2122.

Нужно в массиве все числа, соответствующие определенной маске заменить на некоторое число (например, 3). Т.к. реальные массивы имеют большую размерность, хочется найти какой-то быстрый способ для такой проверки. Пробовал сделать через битовые операции, но не получилось. Может кто-то что-то подскажет?



Офлайн

#2 Март 10, 2011 22:40:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

Сравнение чисел по "маске"

Битовые операции тут подойдут если вы будете использовать более естественную кодировку - не десятичную а двоичную, тогда можно будет вырезать нужную вам часть. те не
2121 (десятичное) а int(“1010”,2). Если будете менять на тройки тогда надо по два бита на разряд int(“1010”,4)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version