Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Matlab矩阵中非连续预定义值的出现顺序_Matlab_Matrix - Fatal编程技术网

Matlab矩阵中非连续预定义值的出现顺序

Matlab矩阵中非连续预定义值的出现顺序,matlab,matrix,Matlab,Matrix,我有一个像这样的9列矩阵: X X X X X X 0 2 0 X X X X X X 6 2 0 X X X X X X 6 2 0 X X X X X X 7 2 0 X X X X X X 8 2 0 X X X X X X 8 2 0 X X X X X X 0 2

我有一个像这样的9列矩阵:

X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   7   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   7   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   1   2   0
X   X   X   X   X   X   1   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   1   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   2   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   0   2   0
X   X   X   X   X   X   1   2   0
我使用X作为本例中不相关的列的值。 第9列最初只包含零。 我想要实现的是更改第9列中的值,对应于预定义值的出现顺序(而所有其他值保持为0)

在脚本中,我应该能够指定一些值(在下面的结果矩阵中:0、1和2),这些值应该在列中每次出现(非连续)时逐步计数。结果应该是:

X   X   X   X   X   X   0   2   1
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   7   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   0   2   2
X   X   X   X   X   X   0   2   2
X   X   X   X   X   X   0   2   2
X   X   X   X   X   X   6   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   7   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   1   2   3
X   X   X   X   X   X   1   2   3
X   X   X   X   X   X   2   2   4
X   X   X   X   X   X   2   2   4
X   X   X   X   X   X   0   2   5
X   X   X   X   X   X   1   2   6
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   2   2   7
X   X   X   X   X   X   8   2   0
X   X   X   X   X   X   0   2   8
X   X   X   X   X   X   1   2   9
在本例中,第7列中应计数的值为值=[0 1 2](顺序不重要:[1 2 0]应给出相同的结果)

在示例最终矩阵中,0的值(在“值”中指定的值之一)出现在第一行中,因此在第9列中变为1(即“值”中的值之一首次出现在第7列中),随后出现其他值,第9列不变(仍然为0)。然后出现0,因此在第9列中添加秩2(在“值”中指定的一个值的第二次出现)。0在连续行中出现三次,如果连续出现,则第9列的值保持相同的秩(例如2)。以此类推,如示例所示

我已根据以下代码进行了更改:

这差不多就到了,但是我需要它来逐步计算所有的值,即使它们以前出现过

请注意,如果第8列等于2(在上面的代码中称为“会话”),则第9列中的值会发生基于第7列的更改。这是与我的特定矩阵的组织相关的要求


我怎样才能达到我的最终目标

我想这是你想要的,没有循环:只是一些索引和
diff
。(但不确定我是否正确处理了第8行):

示例结果:

>> matrix

matrix =

     0     0     0     0     0     0     0     2     1
     0     0     0     0     0     0     3     2     0
     0     0     0     0     0     0     4     2     0
     0     0     0     0     0     0     1     2     2
     0     0     0     0     0     0     1     2     2
     0     0     0     0     0     0     0     2     3
     0     0     0     0     0     0     2     2     4
     0     0     0     0     0     0     6     2     0
     0     0     0     0     0     0     1     2     5
     0     0     0     0     0     0     2     2     6

+1对于公式化良好的问题,似乎缺少的是,如果
values
中的值与先前的相等值相邻,则它在第9列中保持相同的排名(并且不会变为0)。对于我所需要的,你的第9专栏将是[1 0 0 2 3 4 0 5 6]很棒!最后一件事是,如果在同一个矩阵上对第8列使用不同的值运行两次脚本,它将用零覆盖先前的结果。我需要在同一个矩阵上为第八列的不同值运行相同的脚本。。。如果第9列的值不需要更改(即,如果它们不在
值的同一行上),是否有办法防止替换它们?@Albz请参阅更新的答案。现在它不会在第9列中写入任何零,只有非零值可以完美地工作。。。如果我现在想使用您的脚本,但在使用它之后,还要围绕这些已定义的
值更改值7或8和6(例如,检测模式)(),该怎么办?
matrix = [zeros(6,10); 0 3 4 1 1 0 2 6 1 2; 2*ones(1,10)].'; %'// example data
values = [0 1 2]; %// example data

ind = ismember(matrix(:,7), values) & matrix(:,8)==2; %// detect values
ind2 = ind & logical(diff([inf; matrix(:,7)])) ; %// detect start of runs   
[ind3, ~, fill] = find(cumsum(ind2).*ind); %// fill at ind, increasing as per ind2
matrix(ind3,9) = fill; 
>> matrix

matrix =

     0     0     0     0     0     0     0     2     1
     0     0     0     0     0     0     3     2     0
     0     0     0     0     0     0     4     2     0
     0     0     0     0     0     0     1     2     2
     0     0     0     0     0     0     1     2     2
     0     0     0     0     0     0     0     2     3
     0     0     0     0     0     0     2     2     4
     0     0     0     0     0     0     6     2     0
     0     0     0     0     0     0     1     2     5
     0     0     0     0     0     0     2     2     6