首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python MATPLOT库2D数组

Python MATPLOT库2D数组
EN

Stack Overflow用户
提问于 2017-11-22 07:24:50
回答 1查看 67关注 0票数 1

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

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

代码语言:javascript
复制
  N=np.arange(50)
  X=np.arange(-5,6) 
  N,X=np.meshgrid(N,X)

然后,我需要为这两个变量中的每一个计算给定的微分,下面的代码就是抛出错误的地方。

代码语言:javascript
复制
Diff=abs(ExtArcTan(X,N)-atan(X))

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

我在Diff行上得到这个错误:

代码语言:javascript
复制
ValueError: The truth value of an array with more than one element is 
ambiguous. Use a.any() or a.all()

不确定我做错了什么:

供参考:

代码语言:javascript
复制
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
EN

回答 1

Stack Overflow用户

发布于 2017-11-22 07:33:47

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

编辑:下面的内容(未测试)如何:

代码语言:javascript
复制
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))
票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47424407

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档