无法替换矩阵中的值

时间:2014-03-09 10:17:57

标签: matlab matrix replace unique

我正在研究细胞自动机,但我一直遇到这个问题。我有一个矩阵idxR,它包含零和/或1,具体取决于概率过程:

idxR = ((rRecr>rEmpty)&(rRecr>rAlgae)&(rRecr>rCoral));

现在我想用唯一值替换idxR中的所有值并将其分配给变量colonies。我想出了以下内容:

colonies = idxR; 
no = sum(colonies(:)==1)
maxvalue = max(colonies(:));
replace = [1:no]+maxvalue;
ret = reshape(replace,no,1);
colonies(colonies==1) = colonies(colonies==1).*ret;

当我输出colonies时,它给出了一个只包含1和0的矩阵,而不是一个矩阵,其中所有的都已用增量值替换。我在一个新文件中尝试了这个代码,并为idxR分配了一个随机的零和零的矩阵,然后它似乎工作。所以我想问题在于我的自动机中的矩阵idxR。值得一提的是,idxR包含在for循环中。

有人可以告诉我如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

帕拉格做对了。你有解决方案。

如果您正在寻找更“有组织”的方式来到“殖民地”,您可以使用以下代码 -

colonies = double(idxR);
maxvalue = max(colonies(:));
ind1 = find(idxR==1);
colonies(ind1)=maxvalue + (1:numel(ind1));

答案 1 :(得分:0)

除了一个小缺陷外,你的整个逻辑都是正确的。您有idxR作为逻辑矩阵。因此colonies也是一个逻辑矩阵。因此,您可以获得预期的输出,直到倒数第二行。当您尝试将每个数字大于1(colonies(colonies==1).*ret;)的数字数组分配给逻辑矩阵时,最后一行会出现问题。

大于1的元素被剪切为1,因此您只能看到0和1。有一个简单的解决方法。将第一行更改为

colonies = double(idxR);

P.S。答案就在你面前,你只是没有发现它。你写过:

  

我在一个新文件中尝试了这个代码,并为idxR分配了一个随机1和0的矩阵,然后它似乎有效。

idxR矩阵必须是双数据类型,如果您使用randi