我在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)。
我怎样才能做到这一点?
答案 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