numpy中余弦的真逆函数? (NOT arccos)

问题描述 投票:3回答:2

这是一个奇怪的人:

[我发现自己需要一个numpy函数,也就是所谓的np.cos的真正逆函数(或另一个三角函数,在这里使用余弦来确定性)。我所说的“真逆”是一个函数invcos,这样

np.cos(invcos(x)) = x

对于任何实际浮点数x。有两个观察结果:invcos(x)存在(它是一个复杂的浮点数),np.arccos(x)不会执行此操作,因为它仅适用于-1 < x < 1

我的问题是此操作是否有有效的numpy函数,或者是否可以轻松地从现有函数中构建它?

[我的尝试是使用np.arccosnp.arccosh的组合来手动构建函数。这是基于这样的观察:如果一个乘以复数,则np.arccos可以处理[-1,1]中的x,np.arccosh可以处理[-1,1]之外的x。看到这可行:

cos_x = np.array([0.5, 1., 1.5]) x = np.arccos(cos_x) cos_x_reconstucted = np.cos(x) # [0.5 1. nan] x2 = 1j*np.arccosh(cos_x) cos_x_reconstructed2 = np.cos(x2) # [nan+nanj 1.-0.j 1.5-0.j]

所以我们可以将其结合到

def invcos(array): x1 = np.arccos(array) x2 = 1j*np.arccosh(array) print(x1) print(x2) x = np.empty_like(x1, dtype=np.complex128) x[~np.isnan(x1)] = x1[~np.isnan(x1)] x[~np.isnan(x2)] = x2[~np.isnan(x2)] return x cos_x = np.array([0.5, 1., 1.5]) x = invcos(cos_x) cos_x_reconstructed = np.cos(x) # [0.5-0.j 1.-0.j 1.5-0.j]

这会给出正确的结果,但是自然会引发RuntimeWarnings:

RuntimeWarning: invalid value encountered in arccos.

我猜因为numpy甚至告诉我我的算法效率不高,所以可能效率不高。有更好的方法吗?


对于那些对为什么这个奇怪的功能可能有用的感兴趣的读者:动机来自物理学背景。在某些理论中,可以具有“脱壳”的向量成分,这意味着这些成分甚至可能比向量更长。但是,上述功能对于将角度参数化仍然很有用。

[这是一个奇怪的问题:我发现自己需要一个numpy函数,即所谓的np.cos的真正逆函数(或另一个三角函数,此处使用余弦来确定性)。什么...

python numpy trigonometry
2个回答
1
投票
我的问题是此操作是否有高效的numpy函数,或者是否可以轻松地从现有函数中构建它?

-1
投票
np.arcos

© www.soinside.com 2019 - 2024. All rights reserved.