我有两个矩阵,但大小不同。 现在我正在做这样的比较:
ABV = zeros(5,5);
ABB = zeros(4,1);
for ii = 1:4
test = ABV > ABB(ii)
end
我试图找到一个可以做同样事情的矢量化方法,因为我的矩阵不是那么小。我尝试使用BSXFUN
,但它会询问相同的维度矩阵。
答案 0 :(得分:2)
您需要使用permute
将ABB
的元素“发送”到third dimension
singleton dimensions
dim-1
和dim-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)])