我在Matlab中遇到了以下问题:我有一个矩阵A,我想将它的元素与大量其他矩阵(B1、B2、B3等)的元素进行成对比较,最后,我想对较大的元素进行求和,并按权重(w1、w2、w3等)进行加权。我试着计算以下的总和:S= w1 .(max(A,B1))+ w2 .(max(A,B2))+ w3 .*(max(A,B3))...等。我在B和w的索引号上写了一个循环,但这种方法非常慢。有没有一个好的方法来写一个更快的代码来解决这个问题,而不是使用循环?谢谢你的帮忙
wgxvkvu91#
给定:
w = rand(1,10); A = rand(5,5); B1 = rand(5,5); B2 = rand(5,5); ... B10 = rand(5,5);
首先要做的是将所有B矩阵放入一个三维数组中:
B
B = cat(3, B1, B2, ..., B10);
由于max是矢量化的,因此A和单个B之间的最大值为:
max
A
S = max(A,B);
为了应用权重,我们必须将它们重塑为第三维,以乘以正确的max:
w = reshape(w, 1, 1, 10); % or permute(w, [1 3 2]); S = w.*S;
然后,为了求和,我们只需告诉sum在第3维中操作:
sum
S = sum(S, 3);
1条答案
按热度按时间wgxvkvu91#
给定:
首先要做的是将所有
B
矩阵放入一个三维数组中:由于
max
是矢量化的,因此A
和单个B
之间的最大值为:为了应用权重,我们必须将它们重塑为第三维,以乘以正确的max:
然后,为了求和,我们只需告诉
sum
在第3维中操作: