matlab - 矢量化 3d 数组

标签 matlab vectorization

我正在尝试矢量化 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/

相关文章:

R data.table,访问赋值函数内的矩阵

python - 依赖于 numpy 中 2 个数组的函数的矢量化

java - 使用 "deploytool"和Matlab编译器有什么区别?

matlab - 在 Matlab 中绘制多色线

matlab - opencv中是否有等同于matlab conv2的函数

python - 用numpy(或其他向量化方法)优化这个函数

python - 向量化python函数

matlab - 如何在Matlab中删除低于特定音量级别的声音

c++ - 用C++实现Matlab的eps(x)函数

python - 如何在Python中知道日期格式的数据帧是否包含在时间间隔内(矢量化)