我编写了一个应该执行以下操作的函数:
- 将两组作为输入
- 使用此处
pdist2
显示的代码计算两组之间的距离。 - 开始时会占用两组之间的距离。然后,对于第二组,在每次迭代中,它将 (i,j) 位置设置为
0
并计算此更改的距离。一个,当它进入下一次迭代时,它应该将下一个位置值更改为'0',同时将之前设置为'0'的值返回到它的原始值。 - 请注意,
pdist2
最初返回的结果作为矩阵返回,但为了比较,我将矩阵值相加以用于比较。
基于此,我编写了以下函数(请注意,您可以使用此处pdist2.m
链接中的函数):
function m = pixel_minimize_distance(x,y)
sum1=0;
sum2=0;
[r c] = size(y);
d1 = pdist2(x,y);
[r1 c1] = size(d1);
for i=1:r1
for j=1:c1
sum1=sum1+d1(i,j);
end
end
maximum = sum1;
for i=1:r
for j=1:c
o = y(i,j)
y(i,j) = 0;
d2 = pdist2(x,y);
[r2 c2] = size(d2);
for i=1:r2
for j=1:c2
sum2=sum2+d2(i,j);
end
end
if sum2 >= maximum
if o ~= 0
maximum = sum2;
m = o;
end
end
if sum2 <= maximum
maximum = maximum;
end
y(i,j)=o;
end
end
end
现在,这是我作为测试运行的:
>> A=[1 2 3; 6 5 4];
>> B=[4 5 3; 7 8 1];
>> pixel_minimize_distance(A,B)
o =
4
o =
4
o =
1
o =
7
o =
7
o =
0
ans =
7
看到这里的答案是7
(如果看不到,请向下滚动),而我手动计算时的预期值应该是3
,因为当我们将它设置为0
距离的总和时将是142
。
知道代码中可能有什么问题吗?我认为它会在设置o = y(i,j)
whereo
表示原始值的代码中的位置,但真的想不出解决这个问题的方法。
谢谢。