我试图将两个大型数组相互比较并进行一些额外的操作。到目前为止,它的工作原理很慢但很慢。来自一个小小的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是在参考中找到但未在检测中找到的数据。
请注意,检测到的文件包含的条目多于第一个文件,并且不一定具有相同的文件名