根据输入字符串运算符查找索引

时间:2016-06-28 10:51:07

标签: matlab

假设我们在函数中有一个向量

b = 1:100

该函数的输入将是一个条件和阈值,如('<' , 10)

并且函数返回大于,大于等于等于

的索引

传统方法是列出ifs类似

的列表
if(strcmp('>',condition))
    indices = find(b > threshold)

对于每个运算符,但如果我只想在一行中执行它,如果输入条件大于> operater find()函数只是发现b大于阈值而不是如果对于每个运营商

3 个答案:

答案 0 :(得分:2)

正如您在评论中所述,使用eval并不是很好的实践。但是,将操作符作为字符串传递会强制您这样做,这意味着您必须使用它,或者您必须更改函数的输入。

如果您不想被迫使用eval,而不是将代表操作符的字符串传递给该函数,您宁愿直接将其传递给其中一个这些功能:

  1. ge:大于或等于
  2. gt:大于
  3. le:低于或等于
  4. lt:降低
  5. 该功能(我将让你做错误/错误的输入检查)将是:

    function out=Myfun(FunHandle,Threshold)
    
        b=1:100;
    
        out=find(FunHandle(b,Threshold));
    
    end
    

    输出:

    Myfun(@ge,90)
    
      Columns 1 through 8
    
      90    91    92    93    94    95    96    97
    
      Columns 9 through 11
    
      98    99   100
    
    
    
    Myfun(@lt,12)
    
    
      Columns 1 through 8
    
      1     2     3     4     5     6     7     8
    
      Columns 9 through 11
    
      9    10    11
    

答案 1 :(得分:0)

使用MATLAB&#39; eval函数:

eval(['indices = find(b' op num2str(t) ')'])

其中op是一个字符串,包含特定的操作(&#39;&lt;&#;;&#39;&gt;&#39;&#39;&gt; =&#39;等),而t是门槛。

示例

b = 1:10;
op = '>';
t = 4;
eval(['indices = find(b' op num2str(t) ')'])

结果:

indices =

 5     6     7     8     9    10

答案 2 :(得分:0)

使用eval

示例:

operator = '<';
number = 10;
threshold = 3;

condition = [num2str(number) operator num2str(thr)];
eval(condition)

将返回False,因为number不是lower而是thr。尝试更改<的{​​{1}},并评估>