の次の関数の場合matlab
:
function s = support(x, y)
for i=1:length(x)
if(y(i)~=1)
s = x(i);
end
end
end
を満たすすべての値を返すつもりでしたが、関数は `if ステートメントを満たす最後のif-statement
要素のみを返すようです。すべての値を返すにはどうすればよいですか? どのような修正を適用すればよいですか?
あなたは単に書くことができます
s = x(y~=1)
x
これにより、条件 ( ) を満たすすべての要素が返されますy~=1
。ただし、 ifをand とs
同じサイズにする必要がある場合は、条件が false である要素をマスクする方が理にかなっている場合があります。つまり、x
y
s
s = x;
s(y==1) = NaN
s 値は配列ではないため、最後の値のみを返します
function s = support(x, y)
j=1;
for i=1:length(x)
if(y(i)~=1)
s(j) = x(i);
j=j+1;
end
end
この種の問題に対して、Matlab には非常に効率的な構文ショートカットが多数あり、これが Matlab の能力であることにも注意してください。あなたはただ書くことができます:
function s = support(x, y)
s=x(y~=1);
(論理インデックスを見て理解してください)
論理インデックスを使用しx
て、条件を満たすすべての要素を返しy not 1
ます。
s = x( y ~= 1)