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(x,y)およびが行列入力を受け入れる関数である場合C(x,y)、double-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;

しかし、実際には、これに完全に答える前に、より詳細な情報が必要です。

つまりBC関数、行列ですか?あなたはmin_x、を見つけたいmax_xのですが、あなたが与える例では、それはそれぞれちょうど1100です、それで...どういう意味ですか?

于 2012-08-31T07:04:15.107 に答える
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の最初のインデックスは行列の行であり、2番目のインデックスは列であることに注意してください。たとえば、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 に答える