2016-12-14 150 views
0

我有一个0/1值矩阵magnitude和另一个矩阵edgels。两者都是450x450的两倍。我想只保留与magnitude1值对应的边缘单元格,其余为零。我尝试以下操作:为什么矩阵大小不同?

edgels(magnitude==1)=edgels; 

我收到错误:

In an assignment A(:) = B, the number of elements in A and B must be the same.

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

那么其余的值不是1呢?这些应该设置为什么?你也会得到这个错误,因为'magnitude == 1'给了你一个0/1的二进制掩码,并且通过逻辑索引,'magnitude == 1'中的非零值的总数必须与你的元素总数正在分配给'edgels',但事实并非如此。 – rayryeng

+0

@rayryeng对不起。请参阅编辑。 – havakok

+0

edgels(magnitude == 1)'有'numel'条目等于'1'而'edgels'是全矩阵。 – TroyHaskin

回答

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

采取通知的左侧和右侧指针S IDE。需要复制的元素总数相同。

另一替代我可以提供是简单乘法magnitudeedgels逐元素,其中乘法产生的0的结果,如果在magnitude一些元素等于0且是不变否则:

out = edgels .* double(magnitude); 

注意您需要将magnitude转换为与edgels相同的类型以便乘法运行,否则MATLAB会给您提供有关乘以不同类型矩阵的错误。