在MATLAB中,我试图对一个单元格数组做一个函数,但是没有多少运气。我想创建一个cellfun,它检查str2double是否返回NaN值,然后对不是NaNs的值执行str2double。我试图使用一个匿名函数,其中包含一个IF of类语句,但实际上并没有得到任何结果。到目前为止,我想出的是:
x = cellfun(@(x)~isnan(str2double(x)),str2double(x))不管怎么说,有人能帮我吗?
发布于 2016-04-26 14:46:23
您可以使用逻辑索引:
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))))发布于 2017-08-09 10:46:41
下面是一个良好的、紧凑的、工作良好的iif实现:
iif = @(varargin) varargin{3-(varargin{1}>0)}用法:
iif(condition, true_value, false_value)如果条件的计算结果为true,则函数将返回真值,而false_falue则返回真值。
这里有一个有用的过滤器,可以应用于从csv或excel文件中读取的单元格,这样它们就可以用作数字数组。例如,在使用xlsread读取的arrary Ra上:
numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);发布于 2016-04-26 14:30:25
您可能可以使用罗琳·舒尔氏内联条件使其工作:
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)https://stackoverflow.com/questions/36867822
复制相似问题