繁体   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