python中求和符号怎么打_参数siz向量的python符号求和与微分

您可以使用SymPy 1.0版中引入的新张量数组模块。在

我假设您的K和M参数是数字,而不是符号(否则我建议使用symphy.tensor.索引)。在

考虑两个向量的长度。因此,X是秩2和形(2,3)的张量。

我还选择了一个简单的向量:In [1]: from sympy import *

In [2]: from sympy.tensor.array import *

In [3]: var("a,b,c,d,e,f")

Out[3]: (a, b, c, d, e, f)

In [4]: X = Array([[a, b, c], [d, e, f]])

In [5]: var("w1,w2,w3")

Out[5]: (w1, w2, w3)

In [6]: W = Array([w1, w2, w3])

现在创建一个有三个指数的乘积张量(2来自X,1来自W):

^{pr2}$

让我们对第二和第三个索引求和(Python表示法中的索引1和2,因为索引从零开始),这相当于您所称的dot乘积:

^{3}$

同样的表达式可以归纳为:In [12]: stc = sum(tensorcontraction(tp, (1, 2)))

In [13]: stc

Out[13]: a*w1 + b*w2 + c*w3 + d*w1 + e*w2 + f*w3

对于数组的导数,您可以使用derive_by_array(…)。它将创建一个更高阶的张量,其每个分量都由后一个变元的一个分量导出:In [14]: derive_by_array(stc, W)

Out[14]: [a + d, b + e, c + f]

编辑

因为现在已经指定参数M和K是符号,所以我将添加这个部分。在

将X和W声明为索引库:In [1]: X = IndexedBase("X")

In [2]: W = IndexedBase("W")

In [3]: var("i,j,M,K", integer=True)

Out[3]: (i, j, M, K)

您的表达式是指数i和j乘积的和,表达式如下:In [4]: s = Sum(X[i, j]*W[j], (i, 1, M), (j, 1, K))

In [5]: s

Out[5]:

K M

___ ___

╲ ╲

╲ ╲ W[j]⋅X[i, j]

╱ ╱

╱ ╱

‾‾‾ ‾‾‾

j = 1 i = 1

现在,我们将得到s.diff(W[j])或使用不同的索引s.diff(W[k]),不幸的是,这还没有在SymPy中实现。

github上有一个PR,它将增加对索引对象派生的支持,但到目前为止还没有合并:

https://github.com/sympy/sympy/pull/9314

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值