有没有快速的方法来返回Python中相同值的Sin和Cos?

ryl*_*irk 12 python trigonometry numpy

我需要返回大数组中每个元素的sin和cos值.目前我正在做的事情:

a,b=np.sin(x),np.cos(x)
Run Code Online (Sandbox Code Playgroud)

其中x是一些大型数组.我需要保留每个结果的符号信息,所以:

a=np.sin(x)
b=(1-a**2)**0.5
Run Code Online (Sandbox Code Playgroud)

不是一种选择.有没有更快的方法同时返回罪和cos?

Nic*_*mer 8

我将建议的解决方案与perfplot进行了比较,发现没有什么比调用sincos显式调用更好的了。

在此输入图像描述

重现情节的代码:

import perfplot
import numpy as np


def sin_cos(x):
    return np.sin(x), np.cos(x)


def exp_ix(x):
    eix = np.exp(1j * x)
    return eix.imag, eix.real


def cos_from_sin(x):
    sin = np.sin(x)
    abs_cos = np.sqrt(1 - sin**2)
    sgn_cos = np.sign(((x - np.pi / 2) % (2 * np.pi)) - np.pi)
    cos = abs_cos * sgn_cos
    return sin, cos


b = perfplot.bench(
    setup=lambda n: np.linspace(0.0, 2 * np.pi, n),
    kernels=[sin_cos, exp_ix, cos_from_sin],
    n_range=[2**k for k in range(20)],
    xlabel="n",
)
b.save("out.png")
b.show()
Run Code Online (Sandbox Code Playgroud)


小智 -1

您可以利用 tan(x) 包含 sin(x) 和 cos(x) 函数的事实。因此,您可以使用 tan(x) 并使用通用变换函数检索 cos(x) 和 sin(x)。