【发布时间】:2014-04-24 09:49:33
【问题描述】:
考虑一个由 1 和 0 组成的索引向量:
I=[0 0 1 0 1 1 0 0 0];
如何在matlab中轻松生成如下矩阵:
J=[0 2;
1 1;
0 1;
1 2;
0 3];
【问题讨论】:
标签: matlab
考虑一个由 1 和 0 组成的索引向量:
I=[0 0 1 0 1 1 0 0 0];
如何在matlab中轻松生成如下矩阵:
J=[0 2;
1 1;
0 1;
1 2;
0 3];
【问题讨论】:
标签: matlab
使用diff:
I = [0 0 1 0 1 1 0 0 0];
d = diff(I);
ind = [1 find(d~=0)+1]; %// starting index of each new value
rep = diff([ind numel(I)+1]); %// number of repetitions of each new value
J = [ I(ind).' rep.' ];
【讨论】:
使用strfind 做一个稍微大一点的例子 -
I =[1 1 0 0 1 0 1 1 0 0 0 1 1 1 1 0 0]
zero_pos = ['0' num2str(bsxfun(@eq,I,0),'%1d') '0']
ind3 = [ strfind(zero_pos,'01') ; strfind(zero_pos,'10')]
counts = diff(ind3(:))
var = zeros(numel(counts),1);
var(2:2:end)=1;
J = [var counts];
if ind3(1,1)-1>0
J = [1 ind3(1,1)-1;J];
end
输出
J =
1 2
0 2
1 1
0 1
1 2
0 3
1 4
0 2
【讨论】: