Matlab中矩阵中先前定义的值的出现顺序

时间:2013-12-15 17:40:05

标签: matlab matrix

我在Matlab中有很多单独的矩阵,就像这个

0   
6   
6   
7   
8   
8   
0   
2   
6   
6   
8   
7   
8   
8   
7   
1   
2   
2   
0   
1   

我试图创建一个Matlab脚本来生成第二列,其中我报告了外观的顺序(即第1个值为1,第2个值为2,第3个值为3)值 - 在这种情况下为0,1和2 - 同时为所有其他值添加简单的0。 这将是结果:

0   1
6   0
6   0
7   0
8   0
8   0
0   1
2   2
6   0
6   0
8   0
7   0
8   0
8   0
7   0
1   3
2   2
2   2
0   1
1   3

从上面可以看出,在我的3个特定值(即0,1和2)中,0是第一个出现的(因此将1添加到第二列),2是第二个(即a 2进入第二列)和1是第三列(第二列中的3)。所有其他值(6,7,8 ......并且可以有更多)在第二列中报告了0。

此外,这些特定值可能在将来发生变化(即在某些情况下,我希望能够将例如4,5和6定义为特定值,其顺序应在第二列而不是0,1中计算, 2)。

我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:1)

循环搜索所需值的简单解决方案(因为这些值很少,使用循环不应该很慢):

%// Data
vector = [0 6 6 7 8 8 0 2 6 6 8 7 8 8 7 1 2 2 0 1].';
values = [0 1 2];

%'// Computations   
for ii = 1:numel(values)
  first(ii) = find(vector==values(ii),1);
end
[~, use_values] = sort(first);
[~, use_values] = sort(use_values);
result = zeros(numel(vector),2);
result(:,1) = vector;
for ii = 1:numel(values)
  result(vector==values(ii),2) = use_values(ii);
end