首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >广义二项式定理分子计算的矢量化方法?

广义二项式定理分子计算的矢量化方法?
EN

Stack Overflow用户
提问于 2020-09-10 15:29:58
回答 1查看 74关注 0票数 1

我试图编程广义二项式定理,其中n可以是任何有理数,使用矢量化的方法。公式附如下图。

每个项的分子是n,n×(n-1),n×(n-1)×(n-2)等等。我已将0.5至n分配给并试图生成5个术语。

到目前为止,我有一个分子的产品数组: 0.5 -0.5 -1.5 -2.5 -3.5使用

代码语言:javascript
复制
def num_products(number_of_terms):
    r = np.arange(1,number_of_terms+1)
    num_prod = np.array(n-r+1)
    return num_prod

但希望为每个术语创建一个分子数组,如以下所示(数组中的每一项以逗号分隔):

0.5,0.5×-0.5,0.5×-0.5×-1.5,0.5×-0.5×-1.5×-2.5,0.5×-0.5×-1.5×-2.5×-3.5

有人知道如何使用数组(矢量化方法)来完成这个任务吗?我试图使它非常快地计算这些术语,这样我就可以有更多的术语,并提高结果的准确性。

广义二项式定理的公式

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-10 17:10:25

每个术语x*(x-1)*(x-2)*...*(x - n + 1)都被称为降因子。维基百科的文章还描述了不断上升的阶乘x*(x+1)*...*(x + n - 1)。一些计算库包括这些实现。例如,mpmathmpmath.ffmpmath.rf

SciPy将上升的阶乘实现为scipy.special.poch。下降的阶乘可以按照上升的阶乘来实现,如

代码语言:javascript
复制
from scipy.special import poch


def ff(x, m):
    return poch(x - m + 1, m)

因为poch是作为一个NumPy "ufunc“实现的,所以它处理广播,因此ff也是如此。这意味着您可以为m传递一个值数组,通过一次调用计算所有相应的下降阶乘。

例如,要获得n= 0.5的广义二项式的前六个分子项(包括初始项1),调用ff(0.5, np.arange(6))

代码语言:javascript
复制
In [38]: ff(0.5, np.arange(6))
Out[38]: array([ 1.     ,  0.5    , -0.25   ,  0.375  , -0.9375 ,  3.28125])

这和[1, 0.5, 0.5×-0.5, 0.5×-0.5×-1.5, 0.5×-0.5×-1.5×-2.5, 0.5×-0.5×-1.5×-2.5×-3.5]一样

代码语言:javascript
复制
In [40]: [1, 0.5, 0.5*-0.5, 0.5*-0.5*-1.5, 0.5*-0.5*-1.5*-2.5, 0.5*-0.5*-1.5*-2.5*-3.5]
Out[40]: [1, 0.5, -0.25, 0.375, -0.9375, 3.28125]

因此,如果您不介意对SciPy的依赖,您可以使用上面定义的ff来做您想做的事情。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63832991

复制
相关文章

相似问题

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