gpt4 book ai didi

matlab - 两个张量的双点积

转载 作者:行者123 更新时间:2023-12-04 02:52:08 27 4
gpt4 key购买 nike

我有两个张量:A 是二阶张量,B 是四阶张量。我知道在计算 double dot product (:) 时两个张量的阶数将减 2,因此在我的示例中,结果应该是二阶张量。

但是,当我在 MATLAB 中编写这段代码时,出现以下错误:

Matrix dimensions must agree.

我该如何解决这个问题?

最佳答案

colon MATLAB 中的 operator 不做你期望的,因为它提供了另一个功能。事实上,MATLAB 中没有内置的双内积实现。需要自己实现,例如:

idx = max(0, ndims(A) - 1); %// Index of first common dimension
B_t = permute(B, circshift(1:ndims(A) + ndims(B), [0, idx - 1]));
double_dot_prod = squeeze(sum(squeeze(sum(bsxfun(@times, A, B_t), idx)), idx));

AB 是您的张量(多维矩阵)。矢量化这是一个难题,所以我希望我的数学是正确的!

如果需要,可以将这段代码放在一个函数中以方便使用。为了良好的实践,还要验证两个张量都是二阶或更高阶的。这是一个友好的复制粘贴版本:

function C = double_dot(A, B)
assert(~isvector(A) && ~isvector(B))
idx = max(0, ndims(A) - 1);
B_t = permute(B, circshift(1:ndims(A) + ndims(B), [0, idx - 1]));
C = squeeze(sum(squeeze(sum(bsxfun(@times, A, B_t), idx)), idx));

忠告:我建议您阅读在线教程以熟悉 MATLAB 语言的基础知识。

关于matlab - 两个张量的双点积,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17471794/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com