2016-04-22 24 views
2

私は機能defで定義された関数をプロットする方法は?

np.sin(x/2.) * np.exp(x/4.) + 6. * np.exp(-x/4.) 

を持っていると私は次のコードを使用して、それをプロットすることができます

x = np.arange(-5, 15, 2) 
y = np.sin(x/2.) * np.exp(x/4.) + 6. * np.exp(-x/4.) 
plt.plot(x, y) 
plt.show() 

をしかし、私は、関数プロットを定義した場合は動作しません:

rr = np.arange(-5, 15, 2) 

def y(o): 
    return np.sin(o/2.) * np.exp(o/4.) + 6. * np.exp(-o/4.) 

def h(b): 
    return int(y(b)) 

plt.plot(rr, h) 
plt.show() 

はなぜそれは起こり、関数をプロットするためにコードをどのように変更できますか?

答えて

2

代わりにこれを試してみてください:フンから

import numpy as np 
import matplotlib.pyplot as plt 

rr = np.arange(-5, 15, 2) 

def y(o): 
    return np.sin(o/2.) * np.exp(o/4.) + 6. * np.exp(-o/4.) 

plt.plot(rr, y(rr).astype(np.int)) 
plt.show() 
1

回答が成り立ちます。あなたは2つの関数定義を使用しての非常に具体的であれば

しかし、これを試してみてください。

def y(o): 
    return np.sin(o/2.) * np.exp(o/4.) + 6. * np.exp(-o/4.) 
def h(b): 
    l = [] 
    for i in b: 
     l.append(int(y(i))) 
    return l 
rr = np.arange(-5, 15, 2) 
plt.plot(rr, h(rr)) 
plt.show() 

を使用すると、関数「H」と呼ばれるとき、あなたのコードは、動作しなかった理由に答えるために、あなたはしませんでした任意のパラメータを渡します。したがって、関数定義または関数のメモリ位置ポインタを返します。あなたがrrをhに渡したとしても、hはiterableに変換するために処理されませんでした。

+0

データを 'int'にキャストする追加機能を実際に作成したい場合は、単に' h(b) 'の内容を' return y(b).astype(np.int) 'に置き換えることができます。実際に(何らかの理由で)ループを維持したいのであれば、配列全体を 'l = np.zeros_like(b、dtype = np.int)'として最初に定義すれば、はるかに高速です。大量の 'b'の空リストを作成して値を追加するのがはるかに遅くなります(実際はループは不要です:numpyとその操作を配列に使ってください!) – Bart

関連する問題