В 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)]])
Другие вопросы по тегам