如何绘制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也不会被处理以将其转换为可迭代的。
如果你真的想创建一个额外的函数来将数据转换为int,你可以简单地用'return y(b).astype(np.int)'替换'h(b)'的内容。如果你真的(不管什么原因)想要保持一个循环,那么如果你首先定义整个数组为'l = np.zeros_like(b,dtype = np.int)',那么它会快得多。对于大尺寸的'b'来说,创建一个空列表并且追加值会慢得多(但是实际上,这里的循环是不必要的:使用'numpy'的强大功能和对阵列的操作!) – Bart