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