【问题标题】:How to plot a function defined with def?如何绘制用 def 定义的函数?
【发布时间】:2016-08-15 16:39:54
【问题描述】:

我有一个函数

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

为什么会发生,如何更改代码来绘制函数?

【问题讨论】:

    标签: python-2.7 matplotlib plot


    【解决方案1】:

    试试这个:

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

    【讨论】:

      【解决方案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 也不会被处理以将其转换为可迭代对象。

      【讨论】:

      • 如果你真的想创建一个附加函数将数据转换为int,你可以简单地将h(b)的内容替换为return y(b).astype(np.int)。如果你真的(无论出于何种原因)想要保持一个循环,如果你首先将整个数组定义为l=np.zeros_like(b, dtype=np.int),它会更快;对于b 的大尺寸,创建一个空列表并附加值会慢得多(但实际上,这里不需要循环:使用numpy 的强大功能及其对数组的操作!)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-12-07
      • 2011-12-27
      相关资源
      最近更新 更多