在单元格数组中查找负值

时间:2014-06-23 10:48:59

标签: matlab cell

我有以下单元数据

线{1}

ans =

'1000.0    -7    NaN    NaN    70'     
'995.0     32   11.0    6.9    -7'    
'962.0    313    8.8    6.2    84'  
'925.0    640    6.2    5.5    95'  

我会测试列号2,3,5是否具有负值,然后删除相对行。在这种情况下,结果将是:

962.0    313    8.8    6.2     84  
925.0    640    6.2    5.5     95  

我更新了我的帖子,因为我删除了一些行,然后我可以转换为数字矩阵,但我收到消息:“使用cat时出错 连接的矩阵的尺寸不一致。“

3 个答案:

答案 0 :(得分:3)

M = cell2mat(C)
M(~any(M(:,[2,3,5])<0,2),:)

答案 1 :(得分:1)

我假设您有一个矩阵的单元格数组lines

column_ = [2 3 5];
out1 = cellfun(@(a)({a((~any(a(:,column_)<0,2)),:)}),lines);

out1将是一个单元格数组,由您希望lines的相应矩阵组成的矩阵组成。

答案 2 :(得分:1)

我的猜测是你想要在那个单元格中进行迭代,而且可能人们正在建议你(创建一个普通的数组)是最好的方法。但如果你真的需要这样做,这里有一个代码可以完成这项工作:

clear; clc;

lines{1}=['1000.0    -7    NaN    NaN    70',  
'995.0     32   11.0    6.9    -7',    
'962.0    313    8.8    6.2    84',  
'925.0    640    6.2    5.5    95' ]


cols=[2,3,5];                        % Colums to check for negatives

auxdata=str2num(lines{1});
del=sum((auxdata(:,cols)<0)');
indx=1:size(lines{1},1);
del=del.*(1:size(lines{1},1));
del(~del)=[];
lines{1}(del,:)=[];
data=str2num(lines{1})              % non-deleted numerical data

使用此代码,您将在变量data中将结果设为double,并从单元格中删除字符串行。

对于不同的for

,此代码很容易转换为lines{ii}