首页 > 解决方案 > 区分索引向量范数:索引不减少

问题描述

我想区分两个索引向量的差异范数,即计算d || x_a - y_b || / d x_a。我已经设法手动创建规范表达式,因为我发现没有预先存在的方法来单独为单索引向量(上下文)制定它:

N, D = sp.symbols('N D', integer=True)
d = sp.Idx('d', D)

x = sp.IndexedBase('x')
a = sp.Idx('a', N)
y = sp.IndexedBase('y')
b = sp.Idx('b', N)

# Express || x_a - y_b ||
norm = sp.sqrt(sp.Sum((x[a, d] - y[b, d]) ** 2, (d, 0, D - 1)))

这一切都有效,但如上所述,我想区分其中一个变量。

norm.diff(x[a])

但是,这会失败,因为同时使用和x进行索引。我希望求和可以减少向量维数,因为定义了维数并且求和是在整个范围内完成的。ad

我不关心维度,只关心索引向量x[a]y[b],关于它我想区分一个更复杂的表达式。我肯定错过了什么。我该如何进行这种差异化?


我想到的一件事是,我可以滥用 L2 范数与绝对值表达式具有相似导数这一事实——允许丢弃第二个索引。但这似乎很hacky。并且通过初步测试,似乎表达式涉及实部和虚部或分段函数,这有点不方便。

标签: pythonsympy

解决方案


推荐阅读