Есть ли у 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) добавлен).

Другие вопросы по тегам