You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何对不同尺寸向量执行值相减并使用min进行查找(Matlab场景)

搞定不同尺寸矩阵的数值相减与min查找问题

嘿,先理清楚你手里两个矩阵的结构哈:

  • 第一个矩阵testMatrix:是2行3列的,每行对应一组X,Y,Pixel数据(就是你第一个txt里的3 3 10和12 12 210)
  • 第二个矩阵testMatrix2(先把你没写完的读取代码补全,咱们先拿到完整矩阵):是8行4列,每行是ID,X,Y,Pixel,对应你第二个txt里的8组数据

因为俩矩阵尺寸不一样,直接硬减肯定报错,核心思路是先按坐标(X,Y)找到两个矩阵里匹配的行,再对对应的Pixel值做减法,之后用min找结果就行。

第一步:先把第二个矩阵的读取代码补全

你之前的代码没写完,先把这部分搞定,顺便记得关闭文件(不然容易留隐患):

testTwo = fopen('test_file2.txt', 'r');
sizeOfTestTwo = [4 Inf]; % 因为每行是4个元素:ID、X、Y、Pixel
testMatrix2 = fscanf(testTwo, '%d', sizeOfTestTwo);
testMatrix2 = testMatrix2'; % 转置后变成8行4列的矩阵,每行对应一组数据
fclose(testTwo); % 关闭第二个文件
fclose(testOne); % 第一个文件也别忘了关哦

第二步:按坐标匹配,计算Pixel差值

咱们要找的是两个矩阵里X、Y坐标相同的行,然后拿它们的Pixel值相减。用Matlab的ismember函数就能轻松搞定坐标匹配:

% 先把两个矩阵的坐标列提出来
coords1 = testMatrix(:,1:2); % testMatrix里的X、Y列
coords2 = testMatrix2(:,2:3); % testMatrix2里的X、Y列(第1列是ID,跳过)

% 找出coords1里每个坐标在coords2中的位置
[isMatch, idx] = ismember(coords1, coords2, 'rows');

% 只保留匹配成功的行,计算Pixel差值(这里是testMatrix2减testMatrix,你可以换成反过来)
matched_pixel1 = testMatrix(isMatch, 3);
matched_pixel2 = testMatrix2(idx(isMatch), 4);
pixel_diff = matched_pixel2 - matched_pixel1;

第三步:用min函数找最小差值

现在pixel_diff就是所有匹配成功的Pixel差值数组,直接用min就能拿到最小值和它的位置:

[min_diff, min_idx] = min(pixel_diff);

% 咱们可以把结果打印出来,看得更清楚
fprintf('最小差值是:%d\n', min_diff);
fprintf('对应的坐标(X,Y)是:(%d,%d)\n', coords1(isMatch(min_idx),1), coords1(isMatch(min_idx),2));
fprintf('testMatrix里的Pixel值:%d,testMatrix2里的Pixel值:%d\n', matched_pixel1(min_idx), matched_pixel2(min_idx));

额外处理:如果有重复坐标的情况

你第二个矩阵里ID为0的行都是重复的坐标(比如(1,1)出现了两次),要是你想先把相同坐标的Pixel值聚合一下(比如取平均、求和)再做减法,可以这么搞:

% 先把testMatrix2里的唯一坐标找出来
unique_coords2 = unique(coords2, 'rows');
agg_pixel2 = zeros(size(unique_coords2,1),1);

% 对每个唯一坐标,计算对应的Pixel均值(也可以换成sum、max之类的)
for i = 1:size(unique_coords2,1)
    mask = ismember(coords2, unique_coords2(i,:), 'rows');
    agg_pixel2(i) = mean(testMatrix2(mask,4));
end

% 再和testMatrix的坐标匹配计算差值
[isMatch, idx] = ismember(coords1, unique_coords2, 'rows');
pixel_diff = agg_pixel2(idx(isMatch)) - testMatrix(isMatch,3);
[min_diff, min_idx] = min(pixel_diff);

这样就能完美解决不同尺寸矩阵的对应值相减,还能用min找到你要的最小值啦~

内容的提问来源于stack exchange,提问作者user9145305

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:27:39