在python中使用e^x的麦克劳林系列的实现

kim*_*kim 5 python numpy pixel taylor-series

我有 numpy 数组,我想使用 taylor series of 之类的幂级数e^x,我想知道如何在 python 中实现它。为简单起见,我想我可以使用 maclaurin series at x0=0,其中x是 numpy 数组。基本上,我有 1 个暗像素向量,我想通过使用 e^x 的泰勒级数展开来非线性地展开每个像素值。换句话说,在输出向量中,每个像素将被泰勒级数展开项的第一项和第二项替换。有什么想法可以在python中实现吗?

数学概念

这是我想要完成的简单数学概念,其中 nummpy 数组预计将通过使用幂级数(如 maclaurin series of e^x.

在此处输入图片说明

我的尝试

import numpy as np

arr= np.array([[120.0,24.0,12.0],[14.0,28.0,43.0]])
arr= arr/255.0

def maclurin_exp(x, power):
    res = x*0
    for i in range(power):
      res += x**i/math.factorial(i)
    return res

## test my code:
maclurin_exp(x=arr, power=3)
Run Code Online (Sandbox Code Playgroud)

新更新2

确切地说,F是 的泰勒级数e^xx是每个像素值,x0是 0 处的近似点。例如,如果我们在 1 个暗向量中有 8 个像素,那么在我们对每个像素值使用 e^x 的泰勒级数后,第一项和第二项泰勒扩展将被视为输出。

在此处输入图片说明

我如何在 python 中做到这一点?有什么解决方法可以e^x以更紧凑的方式完成麦克劳林级数的实现?任何想法?

预期产出

例如,我们有 1 个暗像素向量[1,2,3,4,5,6,7,8],然后我们应用上述数学方程通过使用 e^x 的 maclurin 系列来近似每个像素值:

pixel = [1,2,3,4,5,6,7,8]
Run Code Online (Sandbox Code Playgroud)

那么每个像素值的 e^x 泰勒级数的第一和第二项将是我的最终输出。

Mer*_*ury 4

根据更新的定义,它可能是这样的:

def exp_taylor(x, x0=0, n_terms=2):
    f_a = np.exp(x0)
    terms = [f_a * ((x-x0)**i)/np.math.factorial(i) for i in range(n_terms)]
    return np.dstack(terms).ravel()
Run Code Online (Sandbox Code Playgroud)

e^(x)遵循以下事实,周围的扩展ae^(a) + e^(a)(x-a) + e^(a)(x-a)^2/2!依此类推。的组合dstack然后ravel将这些项交错成单个向量。因此,如果有[np.array([a0,b0,c0]), np.array([a1,b1,c1])],它会将它们合并为np.array([a0,a1,b0,b1,c0,c1]).

x = np.array([1, 1, 2, 3, 5, 8, 13, 21])
x_ = exp_taylor(x, x0=1, n_terms=3)
print(x_)
>>>
[  2.71828183   0.           0.           2.71828183   0.
   0.           2.71828183   2.71828183   1.35914091   2.71828183
   5.43656366   5.43656366   2.71828183  10.87312731  21.74625463
   2.71828183  19.0279728   66.5979048    2.71828183  32.61938194
 195.71629165   2.71828183  54.36563657 543.65636569]
Run Code Online (Sandbox Code Playgroud)