【发布时间】:2019-08-06 02:02:24
【问题描述】:
TL;DR:我正在尝试在 Matlab 中优化以下短代码。因为它涉及到大型矩阵上的循环,所以它太慢了。
for i = 1:sz,
for j = 1:sz,
if X(j) == Q(i) && Y(j) == R(i),
S(i) = Z(j);
break
end
end
end
细节:基本上,我从 x、y 和 z 数据的三个向量开始,我想将它们绘制为表面。我生成了 x 和 y 数据的网格,然后使用
为相应的 z 值制作了一个矩阵[X, Y] = meshgrid(x, y);
Z = griddata(x, y, z, X, Y);
因为数据是按随机顺序收集的,所以在生成曲面图时,所有连接都是错误的,并且该图看起来都是三角形的,如下例所示。
所以,为了确保 Matlab 连接正确的点,然后我使用重组 X 和 Y 矩阵
[R, R_indx] = sort(Y);
[Q, Q_indx] = sort(X, 2);
从这里开始,我认为根据矩阵 X 和 Y 的排序索引重新组织矩阵 Z 将是一个简单的问题。但我遇到了麻烦,因为无论我如何使用索引,我都无法生成正确的矩阵。比如我试过
S = Z(R_indx); % to match the rearrangement of Y
S = S(Q_indx); % to match the rearrangement of X
运行第一个代码块给了我“想要的”结果,如图所示。但是,这需要很长时间,因为它是一个非常大的矩阵上的双循环。
问题:如何在没有 for 循环的情况下优化矩阵 Z 的这种重新排列?
【问题讨论】:
-
我怀疑没有必要整理您的数据......附上您的数据并向我们展示您的期望。
标签: matlab for-loop matrix optimization reorganize