我有两个.txt文件,我已将其转换为矢量。
第一个.txt文件如下所示:
X Y Pixel
3 3 10
12 12 210
第二个.txt文件如下所示:
ID X Y Pixel
0 1 1 11
0 1 2 11
0 2 1 11
0 2 2 11
1 10 10 220
1 11 10 220
1 10 11 220
1 11 11 220
我已使用以下方法将它们转换为各自的矩阵:
testOne= fopen('test_file1.txt', 'r');
sizeOfTestOne = [4 Inf];
testMatrix = fscanf(testOne, '%d', sizeOfTestOne);
testMatrix = testMatrix’
testTwo = fopen('test_file2.txt', 'r');
sizeOfTestTwo = [3 Inf];
testTwoMatrix = fscanf(testTwo, '%d', sizeOfTestTwo);
testTwoMatrix = testTwoMatrix’
我想做的是:
我想使用第二个.txt文件的值为第一个.txt文件中的值提供一个ID(它将是0或1)。
我想基本上提取第二个.txt文件的整行,其中第一个.txt文件和第二个文件的X和Y值的差异是最小的。
例如,第一个:3个,3个,10个 扫描第二个.txt的值。文件..
我知道我想要的行是第4行(0,2,2,11),因为X和Y值之间的差值是1和1,它们的总和是2,小于任何值其他X和Y值。
第二行将占据最后一行,因为X和Y值之间的差异也是1和1.
所以我希望3,3,10行的ID为0,而12,12,210行的值为1。
我希望这很清楚。
答案 0 :(得分:0)
稍微重写您给定的设置代码:
f1 = fopen('test_file1.txt', 'r');
m1 = (fscanf(f1, '%d', [3 Inf]))';
f2 = fopen('test_file2.txt', 'r');
m2 = (fscanf(f2, '%d', [4 Inf]))';
首先定义行与矩阵之间的度量距离:
dist = @(r, m) sum(abs(r - m), 2);
现在只需遍历m1
中的所有行:
ids = zeros(size(m1, 1), 1);
for i = [1:size(m1, 1)]
[val, idx] = min(dist(m1(i, 1:3), m2(:, 2:4)));
ids(i) = m2(idx, 1);
end
disp(ids)
如果需要,请将m1
与ids
联系起来:
m1 = [ids, m1];
最终结果:
0 3 3 10
1 12 12 210