Есть ли у Numpy встроенная поэлементно-матричная реализация модульного возведения в степень
Есть ли у numpy встроенная реализация для модульного экспонирования матриц?
(Как указывает user2357112, я на самом деле ищу поэлементное модульное сокращение)
Один из способов модульного возведения в степень для обычных чисел выполняется с помощью возведения в степень путем возведения в квадрат ( https://en.wikipedia.org/wiki/Exponentiation_by_squaring), причем модульное сокращение выполняется на каждом шаге. Мне интересно, есть ли подобное встроенное решение для умножения матриц. Я знаю, что могу написать код, чтобы легко имитировать это, но мне интересно, есть ли встроенное решение.
1 ответ
Модульное возведение в настоящий момент не встроено в NumPy ( выпуск GitHub). Самый простой / ленивый способ добиться этого - от pyfunc:
modexp = np.frompyfunc(pow, 3, 1)
print(modexp(np.array([[1, 2], [3, 4]]), 2, 3).astype(int))
печать
[[1 1]
[0 1]]
Это, конечно, медленнее, чем NumPy, и мы получаем массив с dtype=object (отсюда astype(int)
добавлен).