Arrays Matlab多维矩阵:对其中一个维度执行加法的最有效方法

Arrays Matlab多维矩阵:对其中一个维度执行加法的最有效方法,arrays,matlab,matrix,Arrays,Matlab,Matrix,我有一个三维矩阵 sigma = zeros(3, 3, 1000) 和一个矩阵 result = [0.5 0.5 0.5; 0.2 0.2 0.2; 0.1 0.1 0.1] 我的问题是:将我的矩阵“结果”添加到第三维“西格玛”的每个矩阵中的最有效方法是什么 目前,我正在对所有1000个矩阵进行循环,并逐一添加它们。有没有Matlab优化的方法 谢谢 使用: 它会自动沿单个维度复制较小的矩阵,以匹配其他矩阵。使用: 它会自动沿其单子维度复制较小的矩阵,以匹配其他矩阵。sigma+repm

我有一个三维矩阵

sigma = zeros(3, 3, 1000)
和一个矩阵

result = [0.5 0.5 0.5; 0.2 0.2 0.2; 0.1 0.1 0.1]
我的问题是:将我的矩阵“结果”添加到第三维“西格玛”的每个矩阵中的最有效方法是什么

目前,我正在对所有1000个矩阵进行循环,并逐一添加它们。有没有Matlab优化的方法

谢谢

使用:

它会自动沿单个维度复制较小的矩阵,以匹配其他矩阵。

使用:

它会自动沿其单子维度复制较小的矩阵,以匹配其他矩阵。

sigma+repmat(结果[1,11000])

一般来说,传递函数的调用(尽管比循环更有效)没有只涉及本机代码的调用优化得好。

sigma+repmat(结果[1,11000])


一般来说,传递函数的调用(虽然比循环更有效)没有那些只涉及本机代码的调用优化得好。

有趣的是,这似乎并不比在所有单个矩阵上循环快。MATLAB在最近几个版本中改进了JIT加速,所以,如果小矩阵的循环速度实际上稍微快一点,我也不会感到惊讶。不过,对于较大的矩阵,我相信您会看到差异
bsxfun
。有趣的是,这似乎并不比在所有单个矩阵上循环快。MATLAB在最近几个版本中改进了JIT加速,因此,如果小矩阵的循环速度实际上稍微快一点,我也不会感到惊讶。但是对于较大的矩阵,我相信您会看到差异
bsxfun
。它是
repmat
,速度较慢,内存效率较低。试着用for循环和
bsxfun
对你的解决方案进行基准测试,你会发现它几乎慢了一个数量级…我没有MATLAB,但是在倍频程中,sigma+repmat。。。速度大约是bsxfun的三倍(当我将1000更改为100000时,bsxfun在我的笔记本电脑上大约需要6秒,而+repmat大约需要2秒)。知道这一点很好,你肯定会因此获得+1。这个问题是有标签的…好吧,将来当我回答一个关于stackoverflow的Matlab问题时,我会补充一条警告,我实际上是一个倍频程用户,运行时间可能会有所不同。我不知道bsxfun在Matlab中针对特定函数进行了如此出色的优化。总的来说,在讨论中的平台上测试您的解决方案总是值得的:-)我认为
bsxfun
针对中列出的内置函数进行了很好的优化。它是
repmat
,速度较慢,内存效率较低。试着用for循环和
bsxfun
对你的解决方案进行基准测试,你会发现它几乎慢了一个数量级…我没有MATLAB,但是在倍频程中,sigma+repmat。。。速度大约是bsxfun的三倍(当我将1000更改为100000时,bsxfun在我的笔记本电脑上大约需要6秒,而+repmat大约需要2秒)。知道这一点很好,你肯定会因此获得+1。这个问题是有标签的…好吧,将来当我回答一个关于stackoverflow的Matlab问题时,我会补充一条警告,我实际上是一个倍频程用户,运行时间可能会有所不同。我不知道bsxfun在Matlab中针对特定函数进行了如此出色的优化。一般来说,在有问题的平台上测试您的解决方案总是值得的:-)
bsxfun(@plus, sigma, result)