嵌套 for 循环中函数参数的索引元素
Indexing elements of parameters of a function within nested for loops
我有两个结果矩阵,A = 128x631
和 B = 128x1014
我有一个函数 SSD
,它以两个元素 (x,y) 作为参数,然后计算平方差。我还有一个 631x1014 的 0 矩阵,叫做 SSDMatrix
,准备把我的 SSD 函数的结果放进去。
我想做的是将 A 的每个元素与 B 的每个元素进行比较,方法是将它们传递给 SSD
,但我不知道如何构建我的 for 循环以获得所需的结果结果。
当我尝试时:
SSDMatrix = SSD(A, B);
我得到了我正在寻找的结果,但仅限于第一个单元格。如何为 A
和 B
的每个元素重复此过程?
目前我有这个:
SSDMatrix = zeros(NumFeatures1,NumFeatures2);
for i = 1:631
for j = 1:1014
SSDMatrix(i,j) = SSD(A,B);
end
end
这只会导致第一个答案被重复 631*1014 次,所以我需要一种方法来索引 A 和 B,以便为 SSDMatrix 的每个 (i,j) 获得适当的答案。
看来你需要做这样的事情 -
SSDMatrix = zeros(NumFeatures1,NumFeatures2);
for i = 1:631
for j = 1:1014
SSDMatrix(i,j) = sum( (A(:,i) - B(:,j)).^ 2 );
end
end
这,你也可以用 pdist2
来实现,这让我们得到距离平方和的平方根。现在,请注意 pdist2
是 Statistics Toolbox
的一部分。因此,要获得所需的输出,您可以执行 -
out = pdist2(A.',B.').^2;
或者用 bsxfun
-
out = squeeze(sum(bsxfun(@minus,A,permute(B,[1 3 2])).^2,1));
我有两个结果矩阵,A = 128x631
和 B = 128x1014
我有一个函数 SSD
,它以两个元素 (x,y) 作为参数,然后计算平方差。我还有一个 631x1014 的 0 矩阵,叫做 SSDMatrix
,准备把我的 SSD 函数的结果放进去。
我想做的是将 A 的每个元素与 B 的每个元素进行比较,方法是将它们传递给 SSD
,但我不知道如何构建我的 for 循环以获得所需的结果结果。
当我尝试时:
SSDMatrix = SSD(A, B);
我得到了我正在寻找的结果,但仅限于第一个单元格。如何为 A
和 B
的每个元素重复此过程?
目前我有这个:
SSDMatrix = zeros(NumFeatures1,NumFeatures2);
for i = 1:631
for j = 1:1014
SSDMatrix(i,j) = SSD(A,B);
end
end
这只会导致第一个答案被重复 631*1014 次,所以我需要一种方法来索引 A 和 B,以便为 SSDMatrix 的每个 (i,j) 获得适当的答案。
看来你需要做这样的事情 -
SSDMatrix = zeros(NumFeatures1,NumFeatures2);
for i = 1:631
for j = 1:1014
SSDMatrix(i,j) = sum( (A(:,i) - B(:,j)).^ 2 );
end
end
这,你也可以用 pdist2
来实现,这让我们得到距离平方和的平方根。现在,请注意 pdist2
是 Statistics Toolbox
的一部分。因此,要获得所需的输出,您可以执行 -
out = pdist2(A.',B.').^2;
或者用 bsxfun
-
out = squeeze(sum(bsxfun(@minus,A,permute(B,[1 3 2])).^2,1));