我想将来自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
任何人都可以告诉我我该怎么做。感谢
嫁
答案 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);
如果B
和C
只是保存数据的矩阵,那么您可以
Diff = B-C;
但实际上,我需要更多细节才能完全回答这个问题。
那么:B
和C
函数是矩阵吗?您想要找到min_x
,max_x
,但在示例中,您分别只提供1
和100
,那么......你的意思是什么?
答案 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。