如何获得两个二维矩阵的元素对之间的最大值



我必须计算矩阵中每个唯一元素对的最大值。这是我的代码:


resultsMat = [
6   4   4;
0   2   6;
7   7   1;
5   1   73
];
copyMat = resultsMat;
for i=1:size(resultsMat,1)
for j=1:size(resultsMat,2)
for q=1:size(resultsMat,1)
for p=1:size(resultsMat,2)
if i== q && j ~= p
a = max(resultsMat(i,j),copyMat(q,p))
end
end
end
end
end

当我试图将值存储在矩阵中时,问题就来了。例如:

[val ind] =  max(resultsMat(i,j),copyMat(q,p))

这引发了一个错误:

Error using max
MAX with two matrices to compare and two output arguments is not supported.
Error in Untitled2 (line 18)
[a, b] = max(resultsMat(i,j),copyMat(q,p))

如何将a = max(resultsMat(i,j),copyMat(q,p))的值存储在矩阵中?

您需要一个更大的(可能是多维的(矩阵,因为每个(i,j)位置相对于任何(q,p)位置都有一个最大值。这意味着,对于第一个矩阵中的每个元素,都可以获得相同大小的完整矩阵。保存为

matrix_with_results(i,j,q,p) = a

会这样做。然后,给定i,j,q,p的任意组合,它将返回最大值。

确保预先分配

matrix_with_results = zeros(size(resultsMat,1),size(resultsMat,2),size(resultsMat,1),size(resultsMat,2))

速度。


两个音符:

  • 不要使用ij作为索引/变量名称,因为它们表示虚单位。使用它们很容易导致难以调试的错误。

  • 初始化matrix_with_results,即在进入循环之前告诉MATLAB它将有多大。否则,MATLAB将不得不在每次迭代中增加其大小,这是非常缓慢的。这称为预分配。

相关内容

  • 没有找到相关文章

最新更新