Matlab 删除另一矩阵中具有相应零的元素

Matlab 删除另一矩阵中具有相应零的元素,matlab,matrix,Matlab,Matrix,例如,我在Matlab中有两个矩阵A和B A=[0,0,1,2,3,0,4,2,0] B=[2,3,1,2,2,3,4,4,1] 我想做的是将B中的元素设置为零,它们与A中的零元素具有相同的位置。因此在我的示例中: A=[0,0,1,2,3,0,4,2,0] B=[2,3,1,2,2,3,4,4,1] 我希望B像这样: B=[0,0,1,2,2,0,4,4,0] 有什么想法吗?你可以这样做:B(A==0)=0 编辑: 你也可以这样做:B.*(A~=0),根据你下面的评论,使用bsxfun,

例如,我在Matlab中有两个矩阵A和B

A=[0,0,1,2,3,0,4,2,0]
B=[2,3,1,2,2,3,4,4,1]
我想做的是将B中的元素设置为零,它们与A中的零元素具有相同的位置。因此在我的示例中:

A=[0,0,1,2,3,0,4,2,0]
B=[2,3,1,2,2,3,4,4,1]
我希望B像这样:

B=[0,0,1,2,2,0,4,4,0]
有什么想法吗?

你可以这样做:
B(A==0)=0

编辑:


你也可以这样做:
B.*(A~=0)
,根据你下面的评论,使用
bsxfun
,这将更容易推广到更高的维度。

丹建议的唯一问题是,如果A和B的大小不同。不过,您仍然可以通过一些额外的工作来完成这项工作

indices = find(A==0);
indices = indices(indices <= length(B));
B(indices) = 0;
index=find(A==0);

指数=指数(指数谢谢Dan!它起作用了,我还有另一个问题,如果B是多维矩阵,那么a是3x3,B是(3x3)x3,如何对B中的每个3x3矩阵做同样的事情?我知道这可能很简单,但我只是刚刚开始做这个。非常感谢
bsxfun(@times,a~=0,B)
问题是A是uint16,B是uint8,所以它给出了一个错误,如何克服这个错误?你应该作为一个新的问题来问这个问题。错误是什么?你可以将B也转换成uint16:
bsxfun(@times,A~=0,uint16(B))
,但这是一个奇怪的错误,所以之后再转换回
uint8
??