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

Matrices with different size element-by-element comparison

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

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

我正在尝试找到一种可以做同样事情的矢量化方法,因为我的矩阵并不那么小。我尝试使用 BSXFUN,但它要求相同的维度矩阵。

您需要在 permute 那里使用 "send" ABB 的元素到 third dimensiondim-1 中创建 singleton dimensionsdim-2。因此,应用 bsxfun(对于单例扩展)后的最终结果将是一个扩展的 3D array,涵盖了二维数组 ABV 的每个元素与一维数组 [=14] 的每个元素的比较=].所以,做这样的事情 -

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

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


因为ABB是一维数组,你可以用reshape -

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

您可以通过将输入的二维数组转换为一维数组来避免在第三维使用 bsxfun,这可能会导致此处列出的更有效的方法 -

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