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

这是一个非常非常模糊的问题。你的意思是这个:

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

any(array==value)
于 2013-10-21T10:46:19.913 回答
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 viewertic或者,您可以使用和进行一些更简单的计时toc

于 2013-10-21T10:48:42.233 回答