如何基于第三矩阵从另一矩阵提取指定像素创建新矩阵?
解决矩阵逻辑索引赋值的维度不匹配问题
嗨,我来帮你搞定这个问题~你遇到的错误其实是维度不匹配导致的:当你写C(A==0)=B时,你试图把整个B矩阵直接赋值给C中A为0的部分,但A为0的位置是若干个元素(在你的例子里是3个),而B是完整的5元素矩阵,两者数量不对应,MATLAB自然会报错。
正确的修改方法
我们可以分两步来做,逻辑更清晰,也能避免维度问题:
- 先初始化C为全255的矩阵,确保它和A、B尺寸一致,同时匹配B的数据类型(比如如果B是
uint8类型,C也会保持相同类型):C = 255 * ones(size(A), class(B)); - 再把A中值为0的位置对应的B的元素,精准赋值给C的对应位置:
C(A == 0) = B(A == 0);
用你的例子验证
代入你给出的测试数据:
A = [0 35 0 0 88]; B = [22 3 34 99 4];
运行上述代码后,C的结果就是:
C = [22 255 34 99 255];
完全符合你的预期~
更简洁的写法(可选)
如果你喜欢一行搞定,也可以合并成:
C = repmat(255, size(A)); C(A == 0) = B(A == 0);
不过第一种写法更推荐,因为它能自动匹配B的数据类型,避免后续可能出现的类型转换问题。
内容的提问来源于stack exchange,提问作者Matte
相关产品推荐
相关产品推荐

