【问题标题】:Python MATPLOT LIB 2D ArrayPython MATPLOTLIB 二维数组
【发布时间】:2017-11-21 23:24:50
【问题描述】:

我刚开始使用 matplot lib 尝试绘制微分的 3d 表面。具体来说,我有一个任务是编写自己的 ArcTan 函数,在代码中显示为 ExtArcTan,并将其值与 python 自己的值进行比较,在代码中显示为 atan。我对 X 和 N 的不同值执行此操作。N 指的是我的函数中的级数项数,因为它实际上是泰勒近似。

我从创建 x 和 N 数组开始:

  N=np.arange(50)
  X=np.arange(-5,6) 
  N,X=np.meshgrid(N,X)

然后我需要为这两个变量中的每一个计算给定的差异,下面的代码就是引发错误的原因。

Diff=abs(ExtArcTan(X,N)-atan(X))

没有最终的数组,我无法完成将数组放入绘图以生成表面的琐碎任务。

我在 Diff 行收到此错误:

ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

不知道我做错了什么:

供参考:

def ArcTanComponent(x,i): #calculates the ith component of arctan(x) taylor series
   return (((-1)**i)/(2*i+1))*(x**(2*i+1))

def BaseArcTan(x,N): #calculates all components for given N and sums to give approximation of arctan(x)
   Components=[]
   for i in range(N+1):
       Components.append(ArcTanComponent(x,i))
   return np.sum(Components)

def ExtArcTan(x,N): #extends baseArcTan function to work over entire range
    if (x>0):
        return PI/2 - BaseArcTan(1/x,N)
    elif(x<0):
         return -PI/2 - BaseArcTan(1/x,N)
    elif(x==0):
         return 0

【问题讨论】:

    标签: python arrays matplotlib


    【解决方案1】:

    ExtArcTan(x,N) 中,您使用if x&gt;0:(和其他比较),如果x 是错误所说的数组,则这是不明确的。你从N,X=np.meshgrid(N,X) 发送X,这是一个数组。例如,您需要使用 np.where 逐个元素检查,而不是使用 x==0 检查整​​个数组。

    编辑:沿途的东西怎么样(未经测试):

    def ExtArcTan(x,N):
        x = np.sum(ArcTanComponent(x,i) for i in range(N+1))
        if (x>0):
            return PI/2 - BaseArcTan(1/x,N)
        elif(x<0):
             return -PI/2 - BaseArcTan(1/x,N)
        elif(x==0):
             return 0
    
    EAT = np.array([[ExtArcTan(x,N) for x in row] for row in X])
    Diff=abs(EAT-atan(X))
    

    【讨论】:

    • 我明白了,谢谢如果没有完全重写我的函数来接受数组,有没有更简单的方法来生成差分数组?
    • 你的问题不在于计算Diff,而是你的ExtArcTan函数有问题,需要修复它,或者你需要在每个元素上单独调用它。
    • 我意识到这一点。事情是为了这个分配的目的,处理数组的函数唯一需要的是这个特定的绘图任务,所以我想知道如何手动创建一个 diff 数组,这比调整函数更快。我是否只生成一个其索引值与输入匹配的二维数组。我不熟悉 matplotlib 想要的 z 输入到底是什么!
    • 是的,一个白痴无缘无故地对我投了几次票……无论如何,这有帮助吗?
    • 我仍然遇到一个奇怪的错误。今晚我会努力解决它。 “只有整数标量可以转换为索引”或类似的东西
    猜你喜欢
    • 1970-01-01
    • 2018-10-29
    • 1970-01-01
    • 2011-03-03
    • 2019-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-28
    相关资源
    最近更新 更多