我有一个0
/ 1
值矩阵magnitude
和另一个矩阵edgels
。两者都是450x450双。我想只保留edgels中的单元格,这些单元格与1
中的magnitude
值相对应,其余为零。我正在尝试以下操作:
edgels(magnitude==1)=edgels;
我收到错误:
在作业A(:) = B中,A和B中的元素数必须相同。
答案 0 :(得分:2)
您收到该错误是因为magnitude == 1
为您提供了0/1的二进制掩码,并且通过逻辑索引,magnitude == 1
中的非零值总数必须与您的元素总数相匹配分配给edgels
,但事实并非如此。
执行所要求的最简单方法是找到edgels
中幅度不 1或0的所有值,并将这些值设置为0。
edgels(magnitude == 0) = 0;
但是,如果你想使用你的逻辑,你首先要创建一个零矩阵,然后修改输出中相应位置magnitude == 1
的位置:
out = zeros(size(edgels));
out(magnitude == 1) = edgels(magnitude == 1);
注意左侧和右侧。需要复制的元素总数相同。
我可以提供的另一个替代方案是简单地将magnitude
和edgels
元素相乘,其中如果magnitude
中的某个元素等于0并且未触及,则乘法产生0的结果否则:
out = edgels .* double(magnitude);
请注意,您需要将magnitude
转换为与edgels
相同的类型才能使乘法起作用,否则MATLAB将为您提供有关不同类型的矩阵乘法的错误。