【问题标题】:Matlab 3D matrix multiplicationMatlab 3D矩阵乘法
【发布时间】:2020-04-09 07:22:53
【问题描述】:

在 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 的方法,但到目前为止我还没有成功。有什么建议吗?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以通过编写简单地删除内部循环(通过k

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

    注意.* 逐元素乘法。然后,您可以以类似的方式继续删除其他循环。

    但请注意,您的循环很可能很慢,因为您没有preallocate the output array。在循环之前执行此操作:

    Z = zeros(m,m,n);
    

    您还可以通过反转循环顺序来获得一点速度,这样第一个索引在最内层循环中迭代,最后一个索引在最外层循环中迭代。这会按内存顺序访问矩阵数据,从而提高缓存效率。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-06-30
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多