Преобразование функции из sympy в numpy (ошибка атрибута)

import numpy as np
import sympy as sym
from numpy import sin
from sympy import symbols, diff

func = lambda x: sin(x)
x    = symbols('x')
print diff(func(x),x)

Это работает, если я заменяю свою функцию полиномом или помещаю функцию триггера непосредственно в оператор diff. Но в этом формате я получаю AttributeError: sin.

В принципе, я думаю, что python не может распознать func как просто триггерную функцию, которую он знает, как символически интегрировать. У меня может быть просто sympy import sin, и тогда все будет работать, но тогда я застрял с func, ссылающимся на sin в пространстве имен sympy, и есть будущие вещи, которые я хочу делать с func, которые требуют, чтобы он был определен с использованием sin в пространстве имен numpy .


person Thoth    schedule 16.02.2014    source источник
comment
np.sin не примет sympy.core.symbol.Symbol, и я сомневаюсь, что есть какие-то разумные способы сделать это так. Почему вы пытаетесь это сделать?   -  person M4rtini    schedule 17.02.2014
comment
@ M4rtini Я хочу построить func с помощью matplotlib, и если func определен с использованием sin в пространстве имен sympy, это вызывает ошибку.   -  person Thoth    schedule 17.02.2014


Ответы (2)


Вы должны создать свое выражение символически, используя функции SymPy, а затем использовать lambdify, чтобы преобразовать их в вещи, которые можно оценить с помощью NumPy.

person asmeurer    schedule 20.02.2014

Это просто не то, как вы используете sympy. Вы не можете использовать обычные функции вместе с numpy - вам нужно создавать символьные выражения, используя то, что они предоставляют.

Чтобы написать код для получения производной от sin (x), вы должны сделать

import sympy as sym
from sympy import sin, symbols, diff

x = symbols('x')
print diff(sin(x), x)

Если у вас есть какой-то другой конкретный случай, с которым у вас возникли проблемы, вам придется его показать. Вы не можете смешивать таким образом симпозиум с другими, поэтому не может быть никакой общей обратной связи.

person Mike Graham    schedule 16.02.2014
comment
итак, как только я сделаю лямбдификацию производной функции sympy, нет никакого способа получить ее из пространства имен sympy? - person Thoth; 17.02.2014
comment
@ user1378571, вам следует сделать несколько шагов назад и спросить о первоначальной вещи, которую вы пытаетесь сделать, а не о том, что вы сделали, чтобы попытаться ее выполнить. Вы вводите вещи, которые не делают то, что вам нужно. perlmonks.org/index.pl?node_id=542341 - person Mike Graham; 17.02.2014