首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Matlab匿名函数

Matlab匿名函数
EN

Stack Overflow用户
提问于 2016-04-26 14:25:21
回答 3查看 1.8K关注 0票数 4

在MATLAB中,我试图对一个单元格数组做一个函数,但是没有多少运气。我想创建一个cellfun,它检查str2double是否返回NaN值,然后对不是NaNs的值执行str2double。我试图使用一个匿名函数,其中包含一个IF of类语句,但实际上并没有得到任何结果。到目前为止,我想出的是:

代码语言:javascript
复制
x = cellfun(@(x)~isnan(str2double(x)),str2double(x))

不管怎么说,有人能帮我吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-26 14:46:23

您可以使用逻辑索引:

代码语言:javascript
复制
x = {'1', 'NaN', '2', 'NaN'}
y = str2double(x(~isnan(str2double(x))))

y =
     1     2

这两次调用str2double,因此如果您必须执行一百万次,它可能运行得有点慢。

编辑:正如Dan指出的,如果要更改单元格数组的位置,请使用

代码语言:javascript
复制
x{~isnan(str2double(x))} = str2double(x(~isnan(str2double(x))))
票数 3
EN

Stack Overflow用户

发布于 2017-08-09 10:46:41

下面是一个良好的、紧凑的、工作良好的iif实现:

代码语言:javascript
复制
iif = @(varargin) varargin{3-(varargin{1}>0)}

用法:

代码语言:javascript
复制
iif(condition, true_value, false_value)

如果条件的计算结果为true,则函数将返回真值,而false_falue则返回真值。

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

代码语言:javascript
复制
numeric_array = cellfun( @(x) iif(isnumeric(x) & ~isempty(x),x,NaN), Ra);
票数 6
EN

Stack Overflow用户

发布于 2016-04-26 14:30:25

您可能可以使用罗琳·舒尔氏内联条件使其工作:

代码语言:javascript
复制
iif = @(varargin) varargin{2 * find([varargin{1:2:end}], 1, 'first')}();

然后你可以试试

代码语言:javascript
复制
x = cellfun(@(y)iif(~isnan(str2double(y)), str2double(y), true, y), x, 'uni', 0)
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36867822

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档