【问题标题】:Plotting a basic vectorized function绘制基本矢量化函数
【发布时间】:2016-02-03 11:37:57
【问题描述】:

我试图让我的函数在 python 列表间隔上绘制一个矢量化函数,并为该图设置一个 name/title。我对 numpy 和 matplotlib 等 python 包相当陌生。我希望有人能对我的代码有所了解:

import numpy as np
import matplotlib.pyplot as plt
%matplotlib inline    

def test_plot(x,interval,title):
    x = np.vectorize(x)
    interval = [0,interval+1]
    ttl = plt.title(title)
    plt.plot(x,interval)
    return plt.plot(x,interval)    

test_plot([-1,0,1,2,3,4],2,'test')

我收到此错误:

ValueError: x and y must have same first dimension

注意:我需要 interval 成为 list

【问题讨论】:

  • 你有read the documentation 吗?
  • 您的 x 坐标(-1 到 4)在集合中有 6 个元素。由于这条线,您的 y 坐标只有两个:interval = [0,interval] 现在,如果您在 Python 解释器中运行它,您会得到如下内容:interval = 2(在您对函数的输入中定义),interval = [0,interval+1](在您的函数),这使您的 y 坐标只有 0 和 3 可以使用(在您的 python 解释器中检查 interval 的值以验证这一点)。然后,糟糕的代码只能配对 x 和 y 坐标的前两个元素。
  • 你为什么要vectorize一个列表?
  • @fjarri 我正在尝试对函数进行矢量化。
  • @fjarri 好问题。 OP:我认为您的代码中不需要 numpy。您可以通过不导入它来节省一些时间。在做之前想一想为什么你想在你的代码中加入任何东西。 ;)

标签: python python-3.x numpy matplotlib


【解决方案1】:

我不太明白你要绘制什么。

查看文档后,可以找到:

numpy.vectorize 需要一个 pyfunc 初始化。

例如:

>>> def myfunc(a, b):
...     "Return a-b if a>b, otherwise return a+b"
...     if a > b:
...         return a - b
...     else:
...         return a + b

然后启动你的矢量化函数

>>>vfunc = np.vectorize(myfunc)
>>>vfunc([1, 2, 3, 4], 2)
array([3, 4, 1, 2])

参数 pyfunc 必须是 callable 。传递一个列表似乎毫无意义。

至于matplotlib.pyplot.plot

此函数要求 x 和 y 具有相同的维度才能绘制。

但是你的通行证是一个函数和两个元素列表导致 ValueError

【讨论】:

    【解决方案2】:

    像 KIDJournety 一样,我也不太了解您想要什么,但如果我正确理解您的 cmets,这可能会起作用:

    def test_plot(x, interval, title): import matplotlib.pyplot as plt plt.title(title) plt.plot(x, interval) plt.show()

    test_plot([1,2,3], [7,6,5], "hello, world!") 运行良好。 如果这不能满足您的需求(矢量化),请在下面发表评论,我会尽力相应地调整代码。

    现在由于一些实际原因导致您的原始代码无法正常工作: 您传递了一个包含 6 个元素(-1 到 4)的列表或向量作为图形的 x 值,但只有 2 个元素(0 和区间+1,在您的示例中为 3)作为您的 y 值。您糟糕的代码只能配对 (-1, 0) 和 (0,3)。其余的 x 坐标没有要配对的对应 y 坐标,因此代码失败。

    【讨论】:

    • 好吧,感谢您的努力。该问题只是说明定义一个函数,该函数采用向量化函数和长度为 2 的 python 列表间隔并在其上具有标题。我觉得你给的很合适。很抱歉造成混乱!
    • @misheekoh 做作业还是自学?有时我们新手会被这样的东西弄糊涂。 :) 继续学习,它会变得更容易! BTW:如果这个或 KIDJourney 的答案解决了你的麻烦,你会接受正确的答案吗?谢谢!
    • 家庭作业+学习。但我现在明白了。谢谢你。我不能接受@KIDJourney 的回答。我可能会删除这个糟糕的问题。再次感谢您
    • @misheekho:当然,我不能告诉你如何处理你自己的问题,但如果我是你,我不会删除。对于犯同样错误的其他人来说,这很有价值。相信我,我们都去过那里! :D
    猜你喜欢
    • 1970-01-01
    • 2020-04-06
    • 1970-01-01
    • 2019-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多