我遇到了一个问题,我想我已经回答了,但它没有用。这是交易:
我有一个大的单元格数组(大约300000x60),包含一些数字数据,一些日期,一些空白,一些字符串,我必须过滤(如在Excel中): 例如:
m = ...
{ 'date ' 'code' 'number' 'market' 'max' 'min'
'01/01/2000' 'tsa' 1 0 0.9 0.0008
'01/01/2000' 'sje' 2 0 1.8 1.5
'01/02/2000' 'koi' 1 1 5.5 1.8
'02/01/2000' 'sjk' 2 0 5.8 3.5
'05/02/2000' 'kkj' 5 7 5.5 3.8 };
我可以使用:
过滤字符串('code'列)b = m(strcmp('tsa',m(:,2)),:);
结果:
b =
'01/01/2000' 'tsa' 1 0 0.9 0.0008
(这很完美)。
但是当我尝试使用c=m([m{:,3}] == 1,:);
过滤数字时
我在“c”中得到了一些奇怪的答案(我在第3列中得到了一个包含所有可能值的单元格数组,而不仅仅是对应于数字“1”的数组)!
我想要的答案如下:
c = m([m{:,3}] == 1,:)
c =
'01/01/2000' 'tsa' 1 0 0.9 0.0008
'01/02/2000' 'koi' 1 1 5.5 1.8
任何人都可以帮助我吗?
提前致谢!
答案 0 :(得分:0)
问题是m
单元格数组中的标题。
您必须退出标题:
c = m([m{2:end,3}] == 1,:)
如果您选择整个第三列,您将获得:
>> m{:,3}
ans =
number
ans =
1
ans =
2
ans =
1
ans =
2
ans =
5
请注意,该列中的第一个单元格为char
,而其他单元格为double
。
如果你连接它们:
>> [m{:,3}]
ans =
number
这里要小心,因为数字并没有消失,但实际上它们被转换为char
:
>> double(ans)
ans =
110 117 109 98 101 114 1 2 1 2 5
现在发生的事情是,对这个放大的数组进行比较:
>> [m{:,3}] == 1
ans =
0 0 0 0 0 0 1 0 1 0 0
这可能不是你想要的索引。
要测试代码,您可以选择其中的一部分并按F9。只会执行突出显示的代码。因此,您无需在cmd窗口中键入这些命令即可查看代码的一部分内容。