Mengonversi fungsi dari sympy ke numpy (kesalahan atribut)

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)

Ini berfungsi jika saya mengganti fungsi saya dengan polinomial, atau jika saya menempatkan fungsi trigonometri langsung ke operator diff. Namun dalam format ini saya mendapatkan AttributeError: sin.

Pada dasarnya saya pikir python tidak dapat mengenali func hanya sebagai fungsi trigonometri yang dapat diintegrasikan secara simbolis. Saya bisa saja memiliki sympy import sin dan semuanya akan berfungsi, tetapi kemudian saya terjebak dengan func yang mereferensikan sin di namespace sympy dan ada hal-hal di masa depan yang ingin saya lakukan dengan func yang mengharuskannya didefinisikan menggunakan sin di namespace numpy .


person Thoth    schedule 16.02.2014    source sumber
comment
np.sintidak akan menerima sympy.core.symbol.Symbol dan saya ragu ada cara yang masuk akal untuk mewujudkannya. Mengapa Anda mencoba melakukan ini?   -  person M4rtini    schedule 17.02.2014
comment
@ M4rtini Saya ingin memplot fungsi menggunakan matplotlib, dan jika fungsi didefinisikan menggunakan sin di namespace sympy, hal itu menyebabkan kesalahan.   -  person Thoth    schedule 17.02.2014


Jawaban (2)


Anda harus membangun ekspresi Anda secara simbolis menggunakan fungsi SymPy, dan kemudian menggunakan lambdify untuk mengubahnya menjadi sesuatu yang dapat dievaluasi dengan NumPy.

person asmeurer    schedule 20.02.2014

Ini bukan cara Anda menggunakan sympy. Anda tidak dapat menggunakan fungsi normal bersamaan dengan numpy--Anda perlu membuat ekspresi simbolik menggunakan hal-hal yang disediakannya.

Untuk menulis kode guna mendapatkan turunan dari sin(x), Anda dapat melakukannya

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

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

Jika Anda mempunyai kasus tertentu yang bermasalah, Anda harus menunjukkannya. Anda tidak dapat mencampurkan sympy dengan hal-hal non-sympy dengan cara ini, jadi tidak ada masukan umum yang dapat diberikan.

person Mike Graham    schedule 16.02.2014
comment
jadi setelah saya melakukan lambdify turunan dari fungsi sympy, tidak ada cara untuk mengeluarkannya dari namespace sympy? - person Thoth; 17.02.2014
comment
@ pengguna1378571, Anda harus mundur beberapa langkah dan bertanya tentang hal awal yang ingin Anda lakukan, bukan hal-hal yang telah Anda lakukan untuk mencapainya. Anda memperkenalkan hal-hal yang tidak sesuai dengan kebutuhan Anda. perlmonks.org/index.pl?node_id=542341 - person Mike Graham; 17.02.2014