1

我有一个问题,我想我已经回答了,但它没有用。这是交易:

我有一个大型单元格数组(大约 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 };  

我可以使用以下方法过滤字符串(“代码”列):

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

谁能帮我?

提前致谢!

4

1 回答 1

0

问题是m单元格数组中的标题。

你必须离开标题:

c = m([m{2:end,3}] == 1,:)

如果您选择整个第三列,您将获得:

>> m{:,3}
ans =
number
ans =
     1
ans =
     2
ans =
     1
ans =
     2
ans =
     5

请注意,该列中的第一个单元格是 type 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 窗口中键入这些命令即可查看部分代码的作用。

于 2013-04-17T20:10:19.050 回答