在matlab中将数据存储在数组中

时间:2012-08-31 05:22:18

标签: arrays matlab image-processing

我想将来自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

任何人都可以告诉我我该怎么做。感谢

2 个答案:

答案 0 :(得分:1)

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

[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);

如果BC只是保存数据的矩阵,那么您可以

Diff = B-C;

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

那么:BC函数是矩阵吗?您想要找到min_xmax_x,但在示例中,您分别只提供1100,那么......你的意思是什么?

答案 1 :(得分: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。