我需要一种体积向量'点积'。问题是这样的:
我有一卷2x3x4
,它只不过是一堆4
2x3
图像一个接一个。我们称之为卷vol
.
我还有一个4x1
向量,我们称之为vec
。
我希望我的输出是每个图像的加权和。因此,我的输出将是一个2x3
图像。它将通过采取以下措施形成:
output = vol(:,:,1).*vec(1) + vol(:,:,2).*vec(2) + vol(:,:,3).*vec(3) + vol(:,:,4).*vec(4)
我可以把它放在一个 for 循环中,但我想知道是否有更简单的方法。
谢谢。
用
permute
重新排列vec
的维度后,bsxfun
的完美情况,让vec
扩展到vol
的大小,让元素乘法发生,最后使用sum
来获取所需的结果 -
sum(bsxfun(@times,vol,permute(vec,[3 2 1])),3)
或者使用矩阵乘法和一些reshape
-
reshape(reshape(vol,[],numel(vec))*vec,size(vol,1),[])