我有一个 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 列中应计数的值是:values = [0 1 2](顺序并不重要:[1 2 0] 应给出相同的结果)。
在示例最终矩阵中,值 0(“values”中指定的值之一)出现在第一行,因此它变为 1(即“第一次“values”中的一个值出现在第 7 列中”)在第 9 列中,然后是其他值,并且第 9 列不会更改(仍然是 0)。然后出现 0,因此第 9 列中添加了排名 2(“values”中指定的一个值的第 2 次出现)。0 在连续行中出现 3 次,如果连续出现,第 9 列的值保持不变排名(例如 2)。依此类推,如示例所示。
我已经有以下代码,我根据以下代码进行了更改上一个问题 https://stackoverflow.com/questions/20597615/order-of-appearance-of-previously-defined-values-in-a-matrix-in-matlab/:
ALLphases(:,9) = 0; %CREATE COLUMN 9 WITH VALUE 0 everywhere
session = 2;
values = [0 1 2];
for ii = 1:numel(values)
first(ii) = find(ALLphases(ALLphases(:,8)==session,7)==values(ii),1);
end
[~, use_values] = sort(first);
[~, use_values] = sort(use_values);
for ii = 1:numel(values)
ALLphases(ALLphases(:,8)==session & ALLphases(:,7)==values(ii), 9) = use_values(ii);
end
这几乎就在那里,但我需要它逐步计算所有值,即使它们之前出现过。
请注意,仅当第 8 列等于 2(在上面的代码中称为“会话”)时,才会基于第 7 列更改第 9 列中的值。这是与我的特定矩阵的组织相关的要求。
我怎样才能实现我的最终目标?