我有一个DF,我需要计算两个北风和南风分量的弧。但是,arctan2函数似乎只接受两个参数x,y,如文档所示:
numpy.arctan2(x1, x2, /, out=None, *, where=True, casting='same_kind', order='K', dtype=None, subok=True[, signature, extobj]) = <ufunc 'arctan2'>然而,我需要除以x,y分量才能得到我想要的答案。所以,我得这么做-
dfout = np.arctan2(x/ y )使用1个参数,但文档中说我需要2个参数x,y。
我认为"/“符号是一种选择,但我不确定这是否适用,也不确定如何这样做。有什么想法吗?
我的数据在df中如下所示:
day hour Cns Cew
1 0 126.002 -100.812
1 1 -42.3775 18.6631
1 2 64.3313 -121.167我需要在上面的例子中这样做:
dfout = np.arctan2(df.Cew/df.Cns)但我知道这个错误-
TypeError: arctan2() takes from 2 to 3 positional arguments but 1 were given我试过了,但是语法错误。
dfout = np.arctan2(df.Cew,df.Cns,/)使用下面的这个没有提供正确的答案,因为我试图计算平均风向使用Cew (东西)和Cns (北-南)组成部分的风。
这不管用-
dfout = np.arctan2(Cew,Cns)。
我的角度从-180度到+ 180度。
非常感谢,
发布于 2022-11-02 13:28:32
接受一个参数的函数称为np.arctan。但我不确定你真的需要它。
np.arctan(-100.812/126.002)
# -0.6747912684731013
np.arctan2(-100.812, 126.002)
# -0.6747912684731013所以你看..。你为什么要自己去做除法,而不是让np.arctan2去做呢?
另外,np.arctan2更好。因为np.arctan不知道确切的角度,因为缺少一个信息。这些信息就是方向。
想想45°的角度。np.arctan(1/1) =π/4.如预期。显然,np.arctan2(1,1)也是如此。但是,如果坐标是(-1,-1)呢?np.arctan(-1/-1)也是π/4 (明显的是:-1/-1=1/1=1)。但(-1,-1)角不是45°,而是相反的方向,即5π/4 (或-3π/4)。
np.arctan(1/1)
# 0.7853981633974483
np.arctan2(1,1)
# 0.7853981633974483
np.arctan(-1/-1)
# 0.7853981633974483
np.arctan2(-1,-1)
# -2.356194490192345通常,人们希望(-1,-1)的角度是-3π/4,而不是π/4。
您的样本数据中有这样的情况。
np.arctan(18.6631/-42.3775)
# -0.41484291425043723
np.arctan2(18.6631,-42.3775)
# 2.726749739339356第二个(除非我遗漏了您的应用程序的特性)更好。您期望(-42.3775,18.6631)位于第二象限的某个位置,即π/2和π之间。正如arctan2所说。但是把它放在第四位。
所以在你的情况下
# Either
dfout = np.arctan2(df.Cew, df.Cns)
# Or
dfout = np.arctan(df.Cew/df.Cns)但第一个可能是你想要的。
最后一点:arctan2的参数不是x和y,而是y和x。同样,您应该用的不是x/y,而是y/x。因为我不知道您的Cew和Cns到底是什么,所以我让它保持原样。但我猜想它的意思是“东西”和“南北”,所以你可以用
dfout = np.arctan2(df.Cns, df.Cew)
# Or
dfout = np.arctan(df.Cns/df.Cew)但这不是一个编码问题,更多的是一个数学问题(你想要计算的是什么),所以我让你决定。
发布于 2022-11-02 13:15:19
你应该直接用:
dfout = np.arctan2(df.Cew, df.Cns)(或者交换输入np.arctan2(df.Cns, df.Cew) --从问题本身看还不清楚,但是您应该能够从文档和您对输入的了解中了解到这一点)。
np.arctan2()实现atan2(y, x),这是为了解决arctan(y / x)的y / x参数中的符号组合造成的歧义,因此需要对这两个参数进行。
如果您不需要解决这个歧义,您可以安全地使用np.arctan(),它只使用一个参数-- y / x。
https://stackoverflow.com/questions/74289691
复制相似问题