确定列是否在Matrix中按顺序重复N次

时间:2014-06-26 14:00:03

标签: matlab matrix

我知道这个问题已经以不同的方式提出来了:

MATLAB: Identify if a value is repeated sequentially N times in a vector

我想知道如果我处理矩阵坐标,我可以完全按照上面的链接,例如:M = [ x1 x2 x3 x4 ... xn; y1 y2 y3 y4 ... yn]

例如n = 3次:

M=  [ 2 3 3 3 1 4 4 4 6 6 6 6 8; 1 2 2 7 9 5 5 5 4 4 3 3 2]

ans: [ 4 4 4; 5 5 5] at position 6

我正在寻找一个已经“按顺序”重复3次的列。 在上面提到的链接中,有一种方法可以为矢量执行此操作。

3 个答案:

答案 0 :(得分:0)

试试这个

k = size(M,1);

%// fg is a matrix with sum of differences of n continuous columns\
fg = conv2(diff(M'),ones(k,n-1))';

%// coll is a row vector with column indices where fg is zero
[roww coll] = find(fg(k:size(fg,1)-k+1,n-1:end - n) == 0);

%// out_cell is a cell whose entries are the required matrices
out_ = arrayfun(@(x)(M(:,x:x+n-1)),coll,'UniformOutput',0);

out_将是一个包含matrices with size k x n的单元格,其中的列同时发生n

答案 1 :(得分:0)

M的每一行翻译成唯一的数字标签:

[~, ~, m ] = unique(M.','rows');

现在您可以使用向量m而不是矩阵M,也就是说,将m解决方案应用于向量。生成的索引直接对应于M的行。

答案 2 :(得分:0)

基于字符串的方法 -

%// Input (slightly different than yours to properly test out the code
M=  [ 2 3 3 3 1 4 4 4 6 6 6 6 6 6; 1 2 2 7 9 5 5 5 4 4 3 3 3 3] 
N = 3; %// Number of repetitions

match = ['0' num2str(ones(1,N-1),'%1d') '0']; %// string match
ind = strfind(['0' num2str(all(diff(M,[],2)==0),'%1d') '0'],match) %// output

输出 -

M =
     2     3     3     3     1     4     4     4     6     6     6     6     6     6
     1     2     2     7     9     5     5     5     4     4     3     3     3     3
ind =
     6