2016-04-22 45 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

回答持有好。

但是,如果你是使用兩個函數的定義非常明確,那就試試這個:

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也不會被處理以將其轉換爲可迭代的。

+0

如果你真的想創建一個額外的函數來將數據轉換爲int,你可以簡單地用'return y(b).astype(np.int)'替換'h(b)'的內容。如果你真的(不管什麼原因)想要保持一個循環,那麼如果你首先定義整個數組爲'l = np.zeros_like(b,dtype = np.int)',那麼它會快得多。對於大尺寸的'b'來說,創建一個空列表並且追加值會慢得多(但是實際上,這裏的循環是不必要的:使用'numpy'的強大功能和對陣列的操作!) – Bart