[英]Three dimensional matrix, Cartesian product
我有三個向量a,b和c。 a_i的值取決於向量b和c的所有值的笛卡爾乘積之和,再乘以三維矩陣w的因數:
如何在Matlab中編寫代碼?
令b, c
為列向量。 最簡單的方法是將w
折疊為二維矩陣,然后乘以b
,如下所示:
w2 = sum(bsxfun(@times,w,shiftdim(c,-2)),3);
a = w2 * b;
在這里,我針對隨機數據,語法錯誤對其進行測試:
n = 10;
w = randn(n,n,n);
b = randn(n,1);
c = randn(n,1);
w2 = sum(bsxfun(@times,w,shiftdim(c,-2)),3);
a = w2 * b;
% using loops:
aalt = zeros(n,1);
for ii=1:n
for jj=1:n
for kk=1:n
aalt(ii,1) = aalt(ii,1) + w(ii,jj,kk) * b(jj) * c(kk);
end
end
end
% up to roundoff error:
max(abs(aalt - a))
a = sum(sum(bsxfun(@times, w, shiftdim(bsxfun(@times, b(:), c(:).'), -1)), 3), 2)
或通過矩陣乘法替換內部bsxfun
:
a = sum(sum(bsxfun(@times, w, reshape(b(:)*c(:).',[1 numel(b) numel(c)])), 3), 2)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.