查看: 5162|回复: 11|关注: 0

[已解决] MATLAB怎么实现不用循环将cell中的nan导入excel中变为空

[复制链接]

MATLAB 基础讨论
版块优秀回答者

入门

188 麦片

财富积分


50500


4

主题

294

帖子

40

最佳答案
  • 关注者: 3
如题!
导入excel,cell中含有字符、数字以及nan,怎么不用循环将nan变为空
回复主题 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

311 麦片

财富积分


50500


10

主题

353

帖子

65

最佳答案
  • 关注者: 10
发表于 2015-8-7 11:05:13 | 显示全部楼层
res = cellfun(@(x) isnan(x),x,'UniformOutput', false);   %% 但是cellfun与循环的效率几乎一样的(因为他实现原理也是循环),但有的自带的一些可能快一些,isnan可能会快一些吧。
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

188 麦片

财富积分


50500


4

主题

294

帖子

40

最佳答案
  • 关注者: 3
 楼主| 发表于 2015-8-7 11:18:30 | 显示全部楼层
我是考虑用cellfun函数,目的是将nan变为[]
但是用的不太熟,在网上找到的类似下面的:
x{cellfun(@isnan,x,'UniformOutput', false)}=0;
我直接将0变为[],但结果不对。
例如:x={'niawfe;','1',nan,nan,'1'};
直接用你上面的程序你可以看一下结果
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

188 麦片

财富积分


50500


4

主题

294

帖子

40

最佳答案
  • 关注者: 3
 楼主| 发表于 2015-8-7 11:18:52 | 显示全部楼层
逻辑逻辑 发表于 2015-8-7 11:05
res = cellfun(@(x) isnan(x),x,'UniformOutput', false);   %% 但是cellfun与循环的效率几乎一样的(因为 ...

我是考虑用cellfun函数,目的是将nan变为[]
但是用的不太熟,在网上找到的类似下面的:
x{cellfun(@isnan,x,'UniformOutput', false)}=0;
我直接将0变为[],但结果不对。
例如:x={'niawfe;','1',nan,nan,'1'};
直接用你上面的程序你可以看一下结果
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

311 麦片

财富积分


50500


10

主题

353

帖子

65

最佳答案
  • 关注者: 10
发表于 2015-8-7 11:38:29 | 显示全部楼层 |此回复为最佳答案
liuyuting 发表于 2015-8-7 11:18
我是考虑用cellfun函数,目的是将nan变为[]
但是用的不太熟,在网上找到的类似下面的:
x{cellfun(@isnan ...

x(cell2mat(cellfun(@(x) isnumeric(x)&&isnan(x),x,'UniformOutput', false)))=[];
回复此楼 已获打赏: 0 积分

举报

论坛优秀回答者

1

主题

9793

帖子

1473

最佳答案
  • 关注者: 348
发表于 2015-8-7 11:51:33 | 显示全部楼层
liuyuting 发表于 2015-8-7 11:18
我是考虑用cellfun函数,目的是将nan变为[]
但是用的不太熟,在网上找到的类似下面的:
x{cellfun(@isnan ...

如果像你例子里边这样除了nan都是字符串,那么值判断是不是数值就行了:
x={'niawfe;','1',nan,nan,'1'}
x(cellfun('isclass',x,'double')) = {[]};% 如果写成=[],则是删除cell,x最终变为{'niawfe;','1','1'}
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

188 麦片

财富积分


50500


4

主题

294

帖子

40

最佳答案
  • 关注者: 3
 楼主| 发表于 2015-8-7 11:53:13 | 显示全部楼层
逻辑逻辑 发表于 2015-8-7 11:38
x(cell2mat(cellfun(@(x) isnumeric(x)&&isnan(x),x,'UniformOutput', false)))=[];

非常感谢您的回复,应该是我表述不清,很抱歉,
我的意思是将值为nan的单元格保留,其值变为空,
你的程序运行结果是将为nan的单元格删除
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

311 麦片

财富积分


50500


10

主题

353

帖子

65

最佳答案
  • 关注者: 10
发表于 2015-8-7 11:56:33 | 显示全部楼层
liuyuting 发表于 2015-8-7 11:53
非常感谢您的回复,应该是我表述不清,很抱歉,
我的意思是将值为nan的单元格保留,其值变为空,
你的程 ...

id = find(cell2mat(cellfun(@(x) isnumeric(x)&&isnan(x),x,'UniformOutput', false)));
m = length(id);
x(id)=cell(1,m);
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

317 麦片

财富积分


50500


13

主题

397

帖子

61

最佳答案
  • 关注者: 3
发表于 2015-8-7 12:08:06 | 显示全部楼层
  1. x={1 2 nan;'a' 'ff' nan}
  2. x(cellfun(@(x)~ischar(x)&&isnan(x),x))={[]}
复制代码
回复此楼 已获打赏: 0 积分

举报

MATLAB 基础讨论
版块优秀回答者

入门

188 麦片

财富积分


50500


4

主题

294

帖子

40

最佳答案
  • 关注者: 3
 楼主| 发表于 2015-8-7 13:19:08 | 显示全部楼层
逻辑逻辑 发表于 2015-8-7 11:56
id = find(cell2mat(cellfun(@(x) isnumeric(x)&&isnan(x),x,'UniformOutput', false)));
m = length(id) ...

多谢你的答案
回复此楼 已获打赏: 0 积分

举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

关闭

站长推荐上一条 /5 下一条

快速回复 返回顶部 返回列表