为什么矩阵大小不同?

时间:2016-12-14 18:24:51

标签: matlab

我有一个0 / 1值矩阵magnitude和另一个矩阵edgels。两者都是450x450双。我想只保留edgels中的单元格,这些单元格与1中的magnitude值相对应,其余为零。我正在尝试以下操作:

edgels(magnitude==1)=edgels;

我收到错误:

  

在作业A(:) = B中,A和B中的元素数必须相同。

  • 为什么它们的大小不一样?
  • 这样做的最佳方法是什么?

1 个答案:

答案 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);

注意左侧和右侧。需要复制的元素总数相同。

我可以提供的另一个替代方案是简单地将magnitudeedgels元素相乘,其中如果magnitude中的某个元素等于0并且未触及,则乘法产生0的结果否则:

out = edgels .* double(magnitude);

请注意,您需要将magnitude转换为与edgels相同的类型才能使乘法起作用,否则MATLAB将为您提供有关不同类型的矩阵乘法的错误。