1

ほとんどの場合、単一の要素を返す関数があります。特定のケースでは、ベクトルを返します。関数の戻り値/値に特定の値が存在するかどうかを効率的にチェックする方法。

for i=1:n

x=somefunc(data)
//now x could be single value or vector
//say k single value, k=5. 
if(k==x)  // This works if x is single value. What to do in case x is vector.?
//do something
end
// k value changes in every loop, so does x.
end
4

2 に答える 2

2

私はおそらく使用するだろう

ismember(value, array)

高速にしたい場合は、別のオプションを試してプロファイリングするのが最善の方法です。最適なソリューションは、関数がスカラーではなくベクトルを返す頻度によって異なります。以下にいくつかのオプションを示します。

// Use ismember on every iteration
if ismember(k, x)
  // do things
end

// Use any on every iteration
if any(k==x)
  // do thing
end

// Check if you have a scalar value, call ismember if not
if isscalar(x) && k==x || ismember(k,x)
  // do things
end

// Check if you have a scalar value, call any if not
if isscalar(x) && k==x || any(k==x)
  // do things
end

でプロファイラーをオンにしprofile on、関数を実行してから、 で結果を確認できprofile viewerます。または、 と を使用して、より簡単なタイミングを実行することもできticますtoc

于 2013-10-21T10:48:42.233 に答える
2

これは非常に漠然とした質問です。これはどういう意味ですか:

value = 5;
array = [1 5 4 6 7];

any(array==value)
于 2013-10-21T10:46:19.913 に答える