0

我想将来自 for 循环的数据存储在一个数组中。我怎样才能做到这一点?样本输出:

for x=1:100
    for y=1:100

        Diff(x,y) = B(x,y)-C(x,y);

        if (Diff(x,y) ~= 0)

            % I want to store these values of coordinates in array
            % and find x-max,x-min,y-max,y-min
            fprintf('(%d,%d)\n',x,y);


        end
    end
end

谁能告诉我我该怎么做。谢谢

结婚

4

2 回答 2

1

因此,您需要 B 和 C 不同的 x 和 y(或行和列)坐标列表。我假设 B 和 C 是矩阵。首先,您应该对代码进行矢量化以摆脱循环,其次,使用 find() 函数:

Diff = B - C;  % vectorized, loops over indices automatically
[list_x, list_y] = find(Diff~=0);  
   % finds the row and column indices at which Diff~=0 is true

或者,甚至更短,

[list_x, list_y] = find(B~=C);

记住matlab中的第一个索引是矩阵的行,第二个索引是列;如果您尝试使用 imagesc 可视化矩阵 B 或 C 或 Diff,例如,您所称的 X 坐标实际上将显示在垂直方向,而您所称的 Y 坐标将显示在水平方向方向。为了更清楚一点,你可以说

[list_rows, list_cols] = find(B~=C);

然后找到最大值和最小值,使用

maxrow = max(list_rows);
minrow = min(list_rows);

list_cols 也是如此。

于 2012-08-31T15:55:18.350 回答
1

如果B(x,y)C(x,y)是接受矩阵输入的函数,那么您可以代替双循环

[x,y] = meshgrid(1:100);
Diff  = B(x,y)-C(x,y);

mins  = min(Diff);
maxs  = max(Diff);

min_x = mins(1);    min_y = mins(2);
max_x = maxs(1);    max_y = maxs(2);

如果B并且C只是保存数据的矩阵,那么您可以这样做

Diff = B-C;

但实际上,我需要更多细节才能完全回答这个问题。

那么:是BC函数,矩阵?您想找到min_x, max_x,但在您给出的示例中,分别是1100,所以...您是什么意思?

于 2012-08-31T07:04:15.107 回答