如何绘制def定义的函数?

问题描述:

我有一个函数如何绘制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() 

为什么它发生了,我怎么能改变代码来绘制函数?

试试这个:从匈奴

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() 

回答持有好。

但是,如果你是使用两个函数的定义非常明确,那就试试这个:

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