假设我们在函数中有一个向量
b = 1:100
该函数的输入将是一个条件和阈值,如('<' , 10)
并且函数返回大于,大于等于等于
的索引传统方法是列出ifs
类似
if(strcmp('>',condition))
indices = find(b > threshold)
对于每个运算符,但如果我只想在一行中执行它,如果输入条件大于>
operater find()
函数只是发现b大于阈值而不是如果对于每个运营商
答案 0 :(得分:2)
正如您在评论中所述,使用eval
并不是很好的实践。但是,将操作符作为字符串传递会强制您这样做,这意味着您必须使用它,或者您必须更改函数的输入。
如果您不想被迫使用eval
,而不是将代表操作符的字符串传递给该函数,您宁愿直接将其传递给其中一个这些功能:
ge
:大于或等于gt
:大于le
:低于或等于lt
:降低该功能(我将让你做错误/错误的输入检查)将是:
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}},并评估>