2017-01-07 2 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は、例えばy = np.sin(x)ため、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

関連する問題