2017-04-09 4 views
-1

this SO post은 네임 스페이스 충돌이이 오류의 원인 중 하나라고 읽었습니다. 나는이 오류에 자주 빠지다. 그래서, 정확히 을 배우고 싶습니다. 정확히 여기서 어떻게됩니까? 도서관에서 기대할 수있는 것은 무엇입니까?sympy AttributeError : 'Pow'객체에 'sin'속성이 없습니다.

EDIT : fun = lambda x: 4*x*(np.sin(x**2) - 3)*np.cos(x**2)은 테스트 케이스에서 비롯되었으므로 실제로는 '재미'기능으로 사용하도록되어 있습니다. 해당 정보가 누락되어 죄송합니다. 이 제약을 존중하면서 친절하게 토론하십시오.

EDIT2 : 전체 스크립트가 아니라 코드를 재생산하는 중 오류가 발생했습니다. 작업은 섭동 Δ = 10 -8의 순방향 근사법을 사용하여 수위가 낮은 배열을 평가할 수있는 입력 함수의 미분을 계산하는 것입니다.

코드 :

import sympy 
import numpy as np 

# TESTING... 
x = sympy.Symbol('x') 
fun = lambda x: 4*x*(np.sin(x**2) - 3)*np.cos(x**2) 
print fun 
h = 10e-8 #perturbation 
print fun(x) 
print fun(x+h) 
df = (fun(x+h) - fun(x))/h 
print "diff is:", df 

오류 : 당신이 sympy.sin/cos 대신 np.sin/cos 사용하도록되어 있습니다

<function <lambda> at 0x000000001068E2E8> 
Traceback (most recent call last): 

    File "<ipython-input-75-0582d8ebb11b>", line 1, in <module> 
    runfile('D:/test_hw3.py', wdir='D:') 

    File "D:\anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 866, in runfile 
    execfile(filename, namespace) 

    File "D:\anaconda\lib\site-packages\spyder\utils\site\sitecustomize.py", line 87, in execfile 
    exec(compile(scripttext, filename, 'exec'), glob, loc) 

    File "D:/test_hw3.py", line 23, in <module> 
    print fun(x) 

    File "D:/test_hw3.py", line 20, in <lambda> 
    fun = lambda x: 4*x*(np.sin(x**2) - 3)*np.cos(x**2) 
AttributeError: 'Pow' object has no attribute 'sin' 

답변

2

. Numpy는 sympy 표현식을 사용하는 법을 모릅니다. 한편

fun = lambda x: 4 * x * (sympy.sin(x**2) - 3) * sumpy.cos(x**2) 

, 당신은 np.sin을 유지해야하는 경우는, 당신은 하지fun에 sympy 변수를 보내야합니다. 대신 df이 함수 자체가되어야합니다. BTW

fun = lambda x: 4*x*(np.sin(x**2) - 3)*np.cos(x**2) 
h = 1e-8 

df = lambda x: (fun(x+h) - fun(x))/h 

# usage: 
df(np.array([1.0, 2.0, 3.0, 4.0])) 

는 sympy 이미 도함수를 계산하는 diff 기능을 갖는다.

df = sympy.diff(fun(x), x) 
+0

편집 내용에 대한 답변을 검토해주십시오. 감사. – devautor

+0

@devautor 정말로 sympy를 사용해야합니까? – kennytm

+0

예, 있습니다. 대안이 있습니까? [내 요구 사항으로 인해이 작업을 수행 할 수는 없지만] – devautor

0

기능 fun는 NumPy와 인식 인수에만 data types로 동의 NumPy와 함수입니다 np.sinnp.cos 사용합니다. fun(x)을 수행하면 numpy가 numpy 함수에 인수로 제공하는 numpy가 인식하지 못하는 sympy 객체가 "cryptic"오류 메시지를 발생시킵니다. 당신이 문 lambda x:...를 사용하여 fun를 정의 할 때, x가 (당신이 sympy 상징으로 위 x를 정의에도 불구하고) 유효한 데이터 유형에 대한 더미 변수 이름으로 정의에서 처리되는

참고.