矩阵具有不同大小的逐元素比较

时间:2015-02-27 13:59:46

标签: matlab matrix vectorization bsxfun

我有两个矩阵,但大小不同。 现在我正在做这样的比较:

ABV = zeros(5,5);
ABB = zeros(4,1);
for ii = 1:4
    test = ABV > ABB(ii)
end

我试图找到一个可以做同样事情的矢量化方法,因为我的矩阵不是那么小。我尝试使用BSXFUN,但它会询问相同的维度矩阵。

1 个答案:

答案 0 :(得分:2)

您需要使用permuteABB的元素“发送”到third dimension singleton dimensions dim-1dim-2 bsxfun 。因此,应用3D array(单例扩展)后的最终结果将是扩展的ABV,涵盖2D数组ABB的每个元素与1D数组{{1}的每个元素的比较}}。所以,做这样的事情 -

test = bsxfun(@gt,ABV,permute(ABB(:),[3 2 1]))

因此,test的每个3D切片都会将ABV的所有元素与ABB中的一个元素进行比较。


由于ABB是一维数组,您可以将permute替换为reshape -

test = bsxfun(@gt,ABV,reshape(ABB,1,1,[]))

您可以通过将输入的2D数组转换为1D数组来避免在第三维使用bsxfun,这可能会导致更高效的方法 -

test = reshape(bsxfun(@gt,ABV(:),ABB(:).'),[size(ABV) numel(ABB)])