【问题标题】:remove elements with corresponding zeros in another matrix matlab在另一个矩阵matlab中删除具有相应零的元素
【发布时间】:2025-12-04 21:40:02
【问题描述】:

我在 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]

有什么想法吗?

【问题讨论】:

    标签: matlab matrix


    【解决方案1】:

    您可以像这样使用logical indexing 来做到这一点:B(A==0) = 0

    编辑:

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

    【讨论】:

    • 感谢丹!它有效,我还有一个问题,如果 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??
    【解决方案2】:

    Dan 建议的唯一问题是 A 和 B 的大小是否不同。但是,您仍然可以通过一些额外的工作来做到这一点。

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

    【讨论】:

      最近更新 更多