如何在没有循环的情况下获得加权矩阵的平均值?
How get mean of weighted matrixes without loop?
我分别有一组标量和矩阵:
w1, w2...wn
A1, A2... An
如何获得
w1*A1 + w2*A2 + ... + wn*An
没有循环?
以及如何有效地获得
w1*(b1*c1) + w2*(b2*c2) + ... + wn*(bn*cn)
其中 bi
和 ci
是向量,但 bi*ci
是矩阵,而不是标量?
编辑:我有更好的解决方案。
如果您的矩阵 An 存储在大小为 P x Q x N
的 3-D 矩阵中,使得 An = A(:,:,n)
对于 n = 1, 2, ..., N
并且您的权重存储在权重向量中 w
的大小 1 x N
然后以下命令执行加权平均:
B = reshape(w*reshape(permute(A,[3,1,2]),N,[]),[P,Q]);
第一个问题可以通过bsxfun
解决如下:
% create matrices
a=[1 2]
b=randi(9,[3 3 2])
% now you will have to reshape a, so that its non-singleton dimensions match b
% i.e. a is 1 x 2 and b is 3 x 3 x 2, so second dimension of (=2) should match
% 3rd dimension of b (=2). Thus a should be of shape `1 x 1 x 2`. Then you can
% multiply using bsxfun and sum along 3rd dimension as follows
sum(bsxfun(@times, permute(a,[3 1 2]), b),3)
我分别有一组标量和矩阵:
w1, w2...wn
A1, A2... An
如何获得
w1*A1 + w2*A2 + ... + wn*An
没有循环? 以及如何有效地获得
w1*(b1*c1) + w2*(b2*c2) + ... + wn*(bn*cn)
其中 bi
和 ci
是向量,但 bi*ci
是矩阵,而不是标量?
编辑:我有更好的解决方案。
如果您的矩阵 An 存储在大小为 P x Q x N
的 3-D 矩阵中,使得 An = A(:,:,n)
对于 n = 1, 2, ..., N
并且您的权重存储在权重向量中 w
的大小 1 x N
然后以下命令执行加权平均:
B = reshape(w*reshape(permute(A,[3,1,2]),N,[]),[P,Q]);
第一个问题可以通过bsxfun
解决如下:
% create matrices
a=[1 2]
b=randi(9,[3 3 2])
% now you will have to reshape a, so that its non-singleton dimensions match b
% i.e. a is 1 x 2 and b is 3 x 3 x 2, so second dimension of (=2) should match
% 3rd dimension of b (=2). Thus a should be of shape `1 x 1 x 2`. Then you can
% multiply using bsxfun and sum along 3rd dimension as follows
sum(bsxfun(@times, permute(a,[3 1 2]), b),3)