我知道这个问题已经以不同的方式提出来了:
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次的列。 在上面提到的链接中,有一种方法可以为矢量执行此操作。
答案 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