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