Matlab 匿名函数 If Else
Matlab Anonymous Function If Else
在 MATLAB 中,我试图在元胞数组上执行函数,但运气不佳。我想创建一个 cellfun
来检查 str2double
returns NaN
值,然后对不是 [=15= 的值执行 str2double
].我正在尝试使用一个带有 IF Else 语句的匿名函数,但没有真正取得任何进展。这是我到目前为止的想法:
x = cellfun(@(x)~isnan(str2double(x)),str2double(x))
然而它不起作用,有人可以帮助我吗?
您也许可以使用 Loren Shure's 内联条件来实现它:
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)
函数 returns 如果条件计算结果为真则为真值,否则为 false_falue。
这是一个有用的过滤器,可以应用于从 csv 或 excel 文件读取的单元格,因此它们可以用作数字数组。例如,在使用 xlsread 读取的数组 Ra 上:
numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);
在 MATLAB 中,我试图在元胞数组上执行函数,但运气不佳。我想创建一个 cellfun
来检查 str2double
returns NaN
值,然后对不是 [=15= 的值执行 str2double
].我正在尝试使用一个带有 IF Else 语句的匿名函数,但没有真正取得任何进展。这是我到目前为止的想法:
x = cellfun(@(x)~isnan(str2double(x)),str2double(x))
然而它不起作用,有人可以帮助我吗?
您也许可以使用 Loren Shure's 内联条件来实现它:
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)
函数 returns 如果条件计算结果为真则为真值,否则为 false_falue。
这是一个有用的过滤器,可以应用于从 csv 或 excel 文件读取的单元格,因此它们可以用作数字数组。例如,在使用 xlsread 读取的数组 Ra 上:
numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);