比较多个矩阵的Matlab操作

6
我有多个相同大小的矩阵,希望对它们进行比较。因此,我需要一个矩阵,为每个值提供其中三个中最大的值。
以下是一个例子来解释我的意思:
我有3个包含3个人数据的矩阵。
我想要比较这3个矩阵并得到一个结果矩阵。
在该矩阵中,每个单元格/值都应该是该单元格的最高值所在矩阵的名称。因此,如果在3个矩阵中第一个值(1列,1行)分别为2、5、8,则结果矩阵的第一个值应为3(或第3个矩阵的名称)。
3个回答

5
如果三个矩阵是A、B、C,那么请执行以下操作:
[~, M] = max(cat(3,A,B,C),[],3);

它创建了一个三维的“矩阵”,并在第三个维度上进行最大化。

这给了我最高的值,但据我理解,他(或她)正在询问位置... - Lucius II.
+1:我不知道你可以将索引作为第二个参数获取。 - Lucius II.

2

将它们在第三个维度上连接起来,然后使用max的第二个输出,就可以得到您想要的结果

A = rand(3,3);
B = rand(3,3);
C = rand(3,3);

D = cat(3, A, B, C)

[~, Solution] = max(D, [], 3)

e.g.:

D =

ans(:,:,1) =

   0.70101   0.31706   0.83874
   0.89421   0.33783   0.55681
   0.68520   0.11697   0.45631

ans(:,:,2) =

   0.268715   0.213200   0.124450
   0.869847   0.999649   0.153353
   0.345447   0.023523   0.338099

ans(:,:,3) =

   0.216665   0.297900   0.604734
   0.103340   0.767206   0.660668
   0.127052   0.430861   0.021584

Solution =

   1   1   1
   1   2   3
   1   3   1

@user2661122 没问题,欢迎来到SO。如果答案正确,您应该通过点击问题左上角的勾号轮廓来接受它。此外,如果您发现某个答案有帮助,也可以通过点击左上角的向上箭头来给它点赞。 - Dan

0

编辑 由于我不知道max函数的第二个参数,所以以下内容请勿使用:

旧版 嗯,快速而粗糙:

x=[2 5 8];
w=max(x)
[~,loc] = ismember(w,x)

问题涉及矩阵,而不是单个值。 - Luis Mendo

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接