我有以下单元数据
线{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时出错 连接的矩阵的尺寸不一致。“
答案 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}