我正在尝试矢量化 for
循环。我在名为 plt2
的 [68x200]
矩阵中列出了一组坐标,在 [400x1]
中列出了另一组坐标矩阵称为 trans1
。我想创建一个名为 dist1
的三维数组,其中 dist1(:,:,1)
我拥有 plt2
的所有值减去 trans1
的第一个值,一直到 trans1
的末尾。我有一个像这样的 for 循环,它可以工作,但非常慢:
for i=1:source_points;
dist1(:,:,i)=plt2-trans1(i,1);
end
感谢您的帮助。
最佳答案
如果我理解正确,这可以通过 bsxfun
轻松解决:
dist1 = bsxfun(@minus, plt2, shiftdim(trans1,-2));
或者,如果速度很重要,请使用这个等效版本(感谢@chappjc),它似乎要快得多:
dist1 = bsxfun(@minus, plt2, reshape(trans1,1,1,[]));
一般来说,对于这种情况,bsxfun
是一个非常有用的函数。其行为可概括如下:对于其两个输入数组中任意一个的任何单一维度,它都会沿同一维度对另一个数组应用“隐式”for
循环。请参阅doc了解更多详情。
关于matlab - 矢量化 3d 数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19451565/