更快的阵列比较方法matlab:怎么样?

时间:2015-03-04 15:32:43

标签: arrays matlab

我试图将两个大型数组相互比较并进行一些额外的操作。到目前为止,它的工作原理很慢但很慢。来自一个小小的C ++背景,我可以使用指向它们的位置,而不是取每个的值。我已经找到了如何在matlab中使用shrlib这样做,但我不确定它是否适用于双打。

我有什么:

两个文本文件,每个文件格式如下:col 1中的名称,col2中的value1和col 3中的value2

  filename       value1       value2
---------------------------------------
  foo0001         100          200
  foo0001         140          200
  foo0001         135          155
  foo0002         124          145
  foo0002         135          155
  foo0003         1419         1943
     .             .            .
     .             .            . 
  and so on...
  • 我的第一个目标是将第一个文件中value1和value2的值与第二个文件的值进行比较。

  • 第二,我也想容忍关于来自value1和value2的元素的错误

  • 第三,我希望文件比较快速运行(我当前的方法非常慢)

所以这就是我到目前为止所做的:

      file1 = readtable('file1.txt',...
      'Delimiter',' ','ReadVariableNames',false);
      fclose(fileID);         %% Read the files in the form of table


      file2 = readtable('file2.txt',...
      'Delimiter',' ','ReadVariableNames',false);
      fclose(fileID);         %% Read the files in the form of table

      n = 1000;
      detectedCorn = zeros(n,2);   %initialize large nx2 vectors to save value1 and value2
      referenceCorn = zeros(n,2);
      null = ['foo000',int2str(ip)]; % initialize filename as "dynamic" string
      for ip = 1:100
      iv = 1;   % initialize index variables to use later on
      iv2 = 1;  %

      for ii = 1:numel(file1.Var1) %% all Var1 -> name in first col in file1 table


   if strcmp(file1.Var1(ii), null) == 1;
       var = [file1.Var2(ii),file1.Var3(ii)];
      detectedCorn(iv,:) = var;
      var = zeros(1,2);
       iv = iv + 1;
   end

    %REPEAT SAME STEP AS ABOVE FOR file2( I will skip that so the code doesnt get too crowded)
for kk = 1:1000
for rr = 1:1000
    var3 = [0,0];

if all(ismember(detectedCorn(kk,:),var3)) == 0  && all(ismember(referenceCorn(kk,:),var3)) == 0   %% do not count the empty spaces in the array
if all(ismember(detectedCorn(kk,:),referenceCorn(rr,:))) == 1  %% iterate through the two vectors and compare 

    % do something

else
   % do something else

end


end

end

end

end

在if语句之后:if all(ismember(detectedCorn(kk,:),referenceCorn(rr,:))) == 1我想添加一些其他的if语句,以使其更容忍值。例如:

如果向量内的值是145 +/- 2 --->做一点事。

抱歉代码格式错误,

      ---------------------------------------------------------------------------
  Clarification: 

  For example I have these files:
  file 1: Reference
  imagename.png       value1    value2
  000000004.png       100        200
  000000004.png       120        130
  000000004.png       150        1500
  000000005.png       1214       501
 file 2: Detected
 imagename.png        value1    value2
  000000004.png       100       200
  000000004.png       204       300
  000000004.png       300       400
  000000004.png       129       140
  000000004.png       152       1499        
  000000005.png       1200      500

比较我的意思,我想做以下事情: 例如,检测文件(file2)中的第一行我有row1。首先,我必须确保两个文件中的文件名是相同的。如果是这样,那么我可以比较x和y中的数据。如果从检测到的文件(在本例中为100)中的value1与参考文件中的value1的差值等于0,1,2,-1,-2那么,检查两个文件中同一行的value2的差值是否等于0 ,1,2,-1,-2,将变量TP(正匹配)与1相加。依此类推所有文件...通过该逻辑,对于上述数据TP = 2,FP =在Detected中找到的数据但是不在参考中,FN是在参考中找到但未在检测中找到的数据。

请注意,检测到的文件包含的条目多于第一个文件,并且不一定具有相同的文件名

0 个答案:

没有答案