簡體   English   中英

Matlab 3D 矩陣乘法

[英]Matlab 3D matrix multiplication

在 Matlab 中,我有兩個 m×n 矩陣 X 和 Y,n>m。 我需要定義一個 3D m×m×n 矩陣 Z,其分量可以計算為

for i=2:m
    for j=i+1:m
        for k=1:n
            Z(i,j,k) = (Y(j-1,k)-Y(i-1,k))*X(j-1,k);
        end
    end
end

由於這些嵌套循環需要很長的計算時間,我一直在尋找一種使用矩陣乘法來定義矩陣 Z 的方法,但到目前為止我還沒有做到。 有什么建議嗎?

您可以通過編寫簡單地刪除內部循環(在k

Z(i,j,:) = (Y(j-1,:)-Y(i-1,:)).*X(j-1,:);

注意.*逐元素乘法。 然后,您可以以類似的方式繼續刪除其他循環。

但請注意,您的循環很可能很慢,因為您沒有預先分配輸出數組 在循環之前執行此操作:

Z = zeros(m,m,n);

您還可以通過反轉循環順序來提高一點速度,這樣在最內層循環中迭代第一個索引,在最外層循環中迭代最后一個索引。 這會按內存順序訪問矩陣數據,從而提高緩存效率。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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