我有以下两个矩阵
A=[1 2 3 4 5]
B=[4 5 7 8 9 4 1 2 3 4 5 8 7 9 4 2 1 6 1 2 3 4 5 4 8 9 6 4]
我需要在A
中找到B
次重复的次数,之后是以下5个值,并放入矩阵。
例如:
A search through B
Ans: C = [ 1 2 3 4 5
8 7 9 4 2
4 8 9 6 4]
N = 2 % numbers of times
答案 0 :(得分:1)
使用findstr
来识别序列,它返回序列的索引。其余的东西只是一个索引:
X=findstr(A,B);
Y=arrayfun(@(X)(B(X+numel(A):X+2*numel(A)-1)),X,'uni',false);
C=cat(1,A,Y{:});
N=numel(X);
答案 1 :(得分:1)
这是一种方法,使用bsxfun
三次:
%// Data
A = [1 2 3 4 5];
B = [4 5 7 8 9 4 1 2 3 4 5 8 7 9 4 2 1 6 1 2 3 4 5 4 8 9 6 4];
H = 5;
%// Computations:
s = bsxfun(@plus, 0:numel(B)-numel(A), (1:numel(A)).'); %'
ind = find(all(bsxfun(@eq, B(s), A(:)))); %// or im2col(B(:),[numel(A) 1]) instead of B(s)
N = numel(ind);
C = B(bsxfun(@plus, ind(:)+numel(A), 0:H-1));
C = [A; C];
在你的例子中:
>> C
C =
1 2 3 4 5
8 7 9 4 2
4 8 9 6 4
>> N
N =
2