簡體   English   中英

三維矩陣,笛卡爾積

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM