You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何基于第三矩阵从另一矩阵提取指定像素创建新矩阵?

解决矩阵逻辑索引赋值的维度不匹配问题

嗨,我来帮你搞定这个问题~你遇到的错误其实是维度不匹配导致的:当你写C(A==0)=B时,你试图把整个B矩阵直接赋值给C中A为0的部分,但A为0的位置是若干个元素(在你的例子里是3个),而B是完整的5元素矩阵,两者数量不对应,MATLAB自然会报错。

正确的修改方法

我们可以分两步来做,逻辑更清晰,也能避免维度问题:

  1. 先初始化C为全255的矩阵,确保它和A、B尺寸一致,同时匹配B的数据类型(比如如果B是uint8类型,C也会保持相同类型):
    C = 255 * ones(size(A), class(B));
    
  2. 再把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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.28 06:28:19