-3

に次の機能がありmatlabます。

function s = value(x, y)
            for i=1:length(y)
                for j=1:length(y)
                    if y(i,j) ~= 0.5;
                        pixels = x(i,j);
                    end
                end
            end
            pixels
        end

実行すると、結果の最後のピクセルが取得されます。すべての結果のベクトルを取得するにはどうすればよいですか?

ありがとう。

4

3 に答える 3

3

インデックスを保持する必要があります。

function pixels = value(x, y)

pIndex = 1;

for i=1:length(y)
   for j=1:length(y)
      if y(i,j) ~= 0.5;
         pixels(pIndex) = x(i,j);
         pIndex = pIndex + 1;
      end
   end
end

pixels

end

ただし、コードをより効率的で読みやすくするために、コードをベクトル化する必要があります。その関数は次のように置き換えることができます。

pixels = x(y ~= 0.5)
于 2013-02-20T15:02:00.230 に答える
1

pixels(end+1)=x(i,j)左側のベクトルの最後の要素の後に右側の値を追加します。

しかし、 s = x(y~=0.5)このようなことはどうですか?確かにベクトル化されたソリューションがあります。

于 2013-02-20T14:58:36.733 に答える
0

私はmatlabにあまり慣れていませんが、pixels各反復を上書きしているようです。

pixels各反復の値を に置き換えるのではなく、pixels = x(i,j);何かpixels += x(i,j);できることはありますか?

ただし、 が単なる値pixelsではなく、配列または同様のデータ構造である場合は、反復ごとにインデックスを更新して、値が前の反復とは別に格納されるようにし、以前の値を上書きしないようにする必要があります。

于 2013-02-20T14:59:10.083 に答える