Matlab匿名函数If-Else

Matlab匿名函数If-Else,matlab,lambda,anonymous-function,Matlab,Lambda,Anonymous Function,在MATLAB中,我试图在一个单元数组上做一个函数,但运气不太好。我想创建一个cellfun,它检查str2double是否返回NaN值,然后对非NaNs的值执行str2double。我试图使用一个匿名函数,其中包含一个IF-Else语句,但实际上没有什么进展。以下是我到目前为止的想法: x = cellfun(@(x)~isnan(str2double(x)),str2double(x)) 但是它不起作用,有人能帮我吗?您可以使用内联条件: iif = @(varargin) varargi

在MATLAB中,我试图在一个单元数组上做一个函数,但运气不太好。我想创建一个
cellfun
,它检查
str2double
是否返回
NaN
值,然后对非
NaNs
的值执行
str2double
。我试图使用一个匿名函数,其中包含一个IF-Else语句,但实际上没有什么进展。以下是我到目前为止的想法:

x = cellfun(@(x)~isnan(str2double(x)),str2double(x))

但是它不起作用,有人能帮我吗?

您可以使用内联条件:

iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();
那你可以试试

x = cellfun(@(y)iif(~isnan(str2double(y)), str2double(y), true, y), x, 'uni', 0)

您可以使用逻辑索引:

x = {'1', 'NaN', '2', 'NaN'}
y = str2double(x(~isnan(str2double(x))))

y =
     1     2
这会调用两次str2double,因此如果必须执行一百万次,它可能会运行得有点慢

编辑:正如Dan所指出的,如果您想在适当的位置更改单元格数组,请使用

x{~isnan(str2double(x))} = str2double(x(~isnan(str2double(x))))

这是一个很好的、紧凑的、工作正常的iif实现:

iif = @(varargin) varargin{3-(varargin{1}>0)}
用法:

iif(condition, true_value, false_value)
如果条件的计算结果为真,则函数返回真值,否则返回假值

这是一个有用的过滤器,可以应用于从csv或excel文件读取的单元格,以便它们可以用作数字数组。例如,在使用xlsread读取的阵列Ra上:

numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);

对调用
str2double
后返回
NaN
的单元格应如何处理?能否提供一个您试图输入的数据示例。另外,您在此处使用相同的变量名来表示3个不同的概念
x
是匿名函数的输入、输出和变量。我认为这可能是非常令人困惑的。至少更改匿名函数变量名。我对MATLAB中的匿名函数非常陌生,我很难找到相关资源来告诉我这只是一个普通的单元数组,其中它们都是字符串,但我想将一些字符串转换为双精度,即x={'date','number';'12/12/12','3'。我想将这里的3转换为一个双精度,并返回单元格数组以完全匹配OP的尝试这应该是
x(~isnan(str2double(x))=str2double(x(~isnan(str2double(x))))
@Dan:好的一点-我的解决方案不会更改数组。这会有用的,谢谢。我应该说,我在问如何更清楚地获得匿名函数中If-Else语句的功能,这是一个一般性的示例(尽管我仍在使用它)。也许我只是找错人了