我必须计算矩阵中每个唯一元素对的最大值。这是我的代码:
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))
速度。
两个音符:
不要使用
i
或j
作为索引/变量名称,因为它们表示虚单位。使用它们很容易导致难以调试的错误。初始化
matrix_with_results
,即在进入循环之前告诉MATLAB它将有多大。否则,MATLAB将不得不在每次迭代中增加其大小,这是非常缓慢的。这称为预分配。