有效地乘以多维矩阵

Multiplying multi-dimensional matrices efficiently

我很想知道是否有更有效的方法来乘以不需要 'for' 循环的多维矩阵的特定元素。

我有一个个体的区域 * 时间矩阵(例如,50 个区域和 1000 个时间点),我想在每个时间点乘以每对区域,以在每个时间点创建每个区域对的乘积的新矩阵时间点(50 x 50 x 1000)。我目前 运行 的方式是:

for t = 1:1000
    for i = 1:50
        for j = 1:50
            new(i,j,t) = old(i,t) .* old(j,t)

正如您所想象的那样,这非常慢。关于如何修复它以便它 运行 更快的任何想法?

%some example data easy to trace
old=[1:5]'
old(:,2)=old*i
%multiplicatiion
a=permute(old,[1,3,2])
b=permute(old,[3,1,2])
bsxfun(@times,a,b)

permute 用于从 n*m 输入矩阵中生成维度为 n*1*m1*n*m 的 3d 矩阵。以这种方式更改维度,可以使用 new(i,j,k)=a(i,1,k)*b(1,j,k) 计算 new(i,j,k)。逐个元素地应用此类操作是 bsxfun 的设计目的。

关于 bsxfun,首先尝试理解像 bsxfun(@times,[1:7],[1,10,100]') 这样的简单二维示例