Допущения:
value_list
будет присутствовать в key_list
(в той или иной позиции) key_list
только для первого совпадения Решение:
Из из двух массивов мы создаем представления из 3-х кортежей. Затем мы транслируем два представления в двух ортогональных направлениях, а затем проверяем поэлементное равенство на транслируемых массивах.
import numpy as np
value_list = np.array([[2,2,3],[255,243,198],[2,2,3],[50,35,3]], dtype='uint8')
key_list = np.array([[2,2,3],[255,243,198],[50,35,3]], dtype='uint8')
# Define a new dtype, describing a "structure" of 3 uint8's (since
# your original dtype is uint8). To the fields of this structure,
# give some arbitrary names 'first', 'sec', and 'third'
dt = np.dtype([('first', np.uint8, 1),('sec', np.uint8, 1),('third', np.uint8, 1)])
# Now view the arrays as 1-d arrays of 3-tuples, using the dt
v_value_list = value_list.view(dtype=dt).reshape(value_list.shape[0])
v_key_list = key_list.view(dtype=dt).reshape(key_list.shape[0])
result = np.argmax(v_key_list[:,None] == v_value_list[None,:], axis=0)
print (result)
Вывод:
[0, 1, 0, 2]
Примечания:
Хотя это чистое решение без видимых циклов он может иметь скрытую неэффективность, потому что он сопоставляет каждый элемент value_list
с каждым элементом key_list
, в отличие от поиска на основе цикла, который интеллектуально останавливается при первом успешном сопоставлении. Любое полученное преимущество будет зависеть от фактического размера key_list
, а также от того, где происходят успешные совпадения, в key_list
. По мере роста размера key_list
, может быть некоторое размывание преимущества NumPy, особенно если успешные совпадения происходят в основном в более ранней части key_list
.
Представления, которые мы создаем, на самом деле являются простыми структурированными массивами, где каждый элемент представления представляет собой структуру из двух int
с. Один интересный вопрос, который я еще не исследовал, заключается в том, что, когда numpy сравнивает одну структуру с другой, выполняет ли она сравнение каждого поля в структуре или замыкает сравнение полей в первом ошибочном поле структура? Любое такое короткое замыкание может подразумевать небольшое дополнительное преимущество для этого решения со структурированным массивом.
, Что Вы пытаетесь сделать со своим агентом SNMP?! Вы приложение должно отправить прерывания?! или запрос для данных из узла?!
Если вы хотите использовать протокол SNMP из .Net Framework, обратите внимание на эту библиотеку: #SNMP.
Похоже, что с его помощью можно написать собственный SNMP-сервер. Но стандартная архитектура SNMP-агента не основана на .Net и поэтому - я предполагаю - вы не можете использовать упомянутую библиотеку для ее расширения. Вы должны написать свою собственную, и это выглядит возможным с помощью упомянутой библиотеки.
Надеюсь, помощь окажется полезной.
br--mabra
.