2017-01-07 1 views
0

HTML 페이지 양식에서 항목을 가져 와서 항목을 가져오고 항목의 사인 기능을 제공하는 cgi 스크립트로 전달하려고합니다. 엔트리는 다음과 같습니다 : x OR x ** 2 OR (1-x)/x ...Numpy Sine 함수에 저장된 변수를 플러그인 할 수 없습니다.

np.sin()에서 변수 (lala)를 사용할 때까지 작동합니다. 빈 페이지를 반환합니다.

다음은 몇 가지 코드입니다.

import cgi 
import cStringIO 
import matplotlib.pyplot as plt 
import numpy as np 

form = cgi.FieldStorage() 

def doit(): 
    lala = form.getvalue('x') 
    x = np.linspace(-np.pi,np.pi,100) 
    y = np.sin(lala) 

    format = "png" 
    sio = cStringIO.StringIO() 

    plt.plot(x, y) 
    plt.axis('tight') 
    plt.savefig(sio, format=format) 

    data_uri = sio.getvalue().encode('base64').replace('\n', '') 
    img_tag = '<img src="data:image/png;base64,{0}" alt="sucka" />'.format(data_uri) 

    print("Content-type: text/html\n") 
    print("<title>Try Ageen</title>") 
    print("<h1>Hi</h1>") 
    print(img_tag) 
    print("<h1>This is the sine of %s</h1>" %xx) 

doit() 

내가 그것을 읽고 HTML 코드에서 변수 라라를 반환합니다 말했듯 : (예를 들어, x)는 다음의 사인입니다.

lala 변수를 y = np.sin (여기)에 연결할 수 없습니다. lala의 반환 값이 x 인 경우에도 마찬가지입니다.

답변

0

form.getvalue('x')은 문자열을 반환합니다. np.sin()으로 전달하기 전에 numpy 배열로 변환해야합니다. 스크립트가 충돌하기 때문에 빈 페이지가 나타납니다.

1

lala = form.getvalue('x')에서 무엇을 얻나요? 인쇄하십시오. 대부분 'x'와 같은 문자열입니다.

np.sin()은 숫자 또는 배열을 필요로합니다.

In [785]: np.sin(1) 
Out[785]: 0.8414709848078965 
In [786]: x=np.linspace(-np.pi, np.pi, 4) 
In [787]: x 
Out[787]: array([-3.14159265, -1.04719755, 1.04719755, 3.14159265]) 
In [788]: np.sin(x) 
Out[788]: 
array([ -1.22464680e-16, -8.66025404e-01, 8.66025404e-01, 
     1.22464680e-16]) 

y = np.sin(x) 예를 들어,이 y x 같은 수의 요소를 가져야 plt.plot(x, y)에서 작동한다. 나는 당신이 그런 계산을하는 것을 보지 못합니다.

np.sin('x') 문자열 'x'를 사용하면 작동하지 않습니다.

당신은 내가 사전 매핑을 사용하는 것이 좋습니다 것 플로팅 배열을 선택하는 HTML 양식에서 문자열을 사용하려면 :

dd = {'x': x, 'x2': x**2, 'x1': x/(1-x)} 
y = sin(dd[lala]) 
+0

이러한 모든 시도. 사전을 만들 자마자 페이지가 위로 올라가지 않습니다. lala는 'x'로 반환합니다. 예. y = np.sin (dd [lala])이 작동하지 않습니다. 답장을 보내 주셔서 감사합니다. – peer

관련 문제