Matlab中矩阵元素的两两比较

thtygnil  于 2023-03-30  发布在  Matlab
关注(0)|答案(1)|浏览(204)

我在Matlab中遇到了以下问题:
我有一个矩阵A,我想将它的元素与大量其他矩阵(B1、B2、B3等)的元素进行成对比较,最后,我想对较大的元素进行求和,并按权重(w1、w2、w3等)进行加权。
我试着计算以下的总和:
S= w1 .(max(A,B1))+ w2 .(max(A,B2))+ w3 .*(max(A,B3))...等。
我在B和w的索引号上写了一个循环,但这种方法非常慢。
有没有一个好的方法来写一个更快的代码来解决这个问题,而不是使用循环?
谢谢你的帮忙

wgxvkvu9

wgxvkvu91#

给定:

w = rand(1,10);
A = rand(5,5);
B1 = rand(5,5);
B2 = rand(5,5);
...
B10 = rand(5,5);

首先要做的是将所有B矩阵放入一个三维数组中:

B = cat(3, B1, B2, ..., B10);

由于max是矢量化的,因此A和单个B之间的最大值为:

S = max(A,B);

为了应用权重,我们必须将它们重塑为第三维,以乘以正确的max:

w = reshape(w, 1, 1, 10);   % or permute(w, [1 3 2]);
S = w.*S;

然后,为了求和,我们只需告诉sum在第3维中操作:

S = sum(S, 3);

相关问题