不同大小的矩阵逐元素比较
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 dimension
在 dim-1
中创建 singleton dimensions
和 dim-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)])
我有两个矩阵,但大小不同。 现在我正在做这样的比较:
ABV = zeros(5,5);
ABB = zeros(4,1);
for ii = 1:4
test = ABV > ABB(ii)
end
我正在尝试找到一种可以做同样事情的矢量化方法,因为我的矩阵并不那么小。我尝试使用 BSXFUN
,但它要求相同的维度矩阵。
您需要在 permute
那里使用 "send" ABB
的元素到 third dimension
在 dim-1
中创建 singleton dimensions
和 dim-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)])