【问题标题】:How to set up python function for multiplying multiple variable polynomial如何设置用于乘以多个变量多项式的python函数
【发布时间】:2022-06-11 17:30:51
【问题描述】:

我试图在这里和谷歌上搜索,看看我是否能找到解决方案,但我只找到了那里的一部分。 This post 很有帮助,但我需要做的实际上是求解相乘多项式,而不仅仅是直观地表示它。

我正在努力寻找最好的设置方法。我也见过 numpy poly1d 和 polymul,但这些似乎只有一个变量。这就是我想要做的:

z1 = w1 * y0 + b1
Square z1 --> so y1 = z1 ** 2 = w1**2 * y0**2 + 2*w1*y0*b1 + b1**2

then I want to multiply out y2 where y2 = (w2 * y1 + b2)**2

我可以让这个简单的工作(它是一个神经网络,其激活函数只是对仿射函数进行平方)。但我想将其平方为第二层,将 w2、b2 和 y1 添加到混合中。在纸上它已经很乱了。我想要一种为层输入一个参数 L 的方法(高于 1)。

我正在尝试这样的事情,将指数和“块”存储在字典中,但这并不是我真正想要的:

CW0 = 1
Cb0 = 1

W1_exp = 1
y0_exp = 1
b1_exp = 1

parameters = {}

for l in range(1,L+1):
        #constants
        parameters['CW' + str(l)] = CW0 * CW0
        parameters['CWb' + str(l)] = CW0 * Cb0 + CW0 * Cb0
        parameters['Cb' + str(l)] = Cb0 * Cb0
        
        parameters['CW' + str(l) + '_W' + str(l) + '_exp'] = W1_exp + W1_exp
        parameters['CW' + str(l) + '_y' + str(l-1) + '_exp'] = y0_exp + y0_exp

【问题讨论】:

    标签: python polynomials


    【解决方案1】:

    既然您说您对帖子开头给出的链接中的答案感到满意,我假设您可以使用sympy,并且您不会编写代码来定义多项式并进行乘法运算,从头开始添加等。

    您可以在该帖子中使用完全相同的sympy,但我想您感到困惑的一件事是如何为变量编号。假设您想同时定义符号变量x1x2x3。您可以使用来自sympysymbols 命令作为x = sympy.symbols( "x1:4" )。所以x 将是一个存储x1 直到x 的元组,其索引小于4,即x3。然后对于这些变量中的每一个,您只需调用x[i] (i = 1, 2, 3)。现在如果范围是变化的,换句话说,你有一个整数变量n,并且你希望python自动定义符号变量x1x2,...直到xn。然后只需使用 f 字符串; x = sympy.symbols( f"x1:{n+1}" ).

    要扩展符号表达式,例如表达式的平方,请使用来自sympyexpand 命令。所以这里有一段代码,它有一个函数从你那里接收一个非负整数,然后返回你在​​问题中谈到的层中的多项式。

    import sympy
    
    def PLayer( n ):
        if type( n ) != int or n < 0:
            raise ValueError( "The input, the layer index, must be a nonnegative integer.")
        y = sympy.Symbol( "y0" )
        w = sympy.symbols( f"w1:{n+1}" )
        b = sympy.symbols( f"b1:{n+1}" )
        output = y
        for i in range( n ):
            output = (w[i] * output + b[i]) ** 2
        return( sympy.expand( output ) )
    

    现在让我们检查一下。

    for i in range(3):
        print( f"The {i}-th layer polynomial is {PLayer( i )},\n" )
    

    这是您将在终端中看到的内容

    The 0-th layer polynomial is y0.
    
    The 1-th layer polynomial is b1**2 + 2*b1*w1*y0 + w1**2*y0**2.
    
    The 2-th layer polynomial is b1**4*w2**2 + 4*b1**3*w1*w2**2*y0 + 2*b1**2*b2*w2 + 6*b1**2*w1**2*w2**2*y0**2 + 4*b1*b2*w1*w2*y0 + 4*b1*w1**3*w2**2*y0**3 + b2**2 + 2*b2*w1**2*w2*y0**2 + w1**4*w2**2*y0**4.
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-04-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多