В python sympy, как применить внешнюю функцию python к каждому элементу матрицы sympy?
Чтобы быть более конкретным, я хочу применить следующую сигмоидальную функцию:
def sigmoid(x):
return 1 / (1 + m.exp(-x))
к каждому элементу следующей 2x2 матрицы Симпи:
Matrix([[1,3],[2,4]])
Matrix([
[1, 3],
[2, 4]])
Таким образом, применяя сигмоидную функцию к матрице, я получу новую Матрицу 2х2, где к каждому отдельному элементу Матрицы была применена сигмоида. Как следующее:
Matrix([[ sigmoid(1), sigmoid(3) ],[ sigmoid(2), sigmoid(4) ]])
Как это может быть сделано?
1 ответ
Решение
>>> M.applyfunc(sigmoid)
Matrix([
[1/(exp(-1) + 1), 1/(exp(-3) + 1)],
[1/(exp(-2) + 1), 1/(exp(-4) + 1)]])
Это использует SymPy exp
в sigmoid
функция. Если m.exp
означает, что вы импортируете exp
от math
, тогда результат не будет выглядеть хорошо, и будет выдавать ошибку, если матрица содержит символы.
Если вы буквально хотите sigmoid(1)
и так далее внутри функции, то sigmoid
должна быть функция SymPy, которая ничего не оценивает.
class sigmoid(Function):
pass
С этим,
>>> M.applyfunc(sigmoid)
Matrix([
[sigmoid(1), sigmoid(3)],
[sigmoid(2), sigmoid(4)]])