usuario sesion que mexico mathworks log inicio iniciar fabricante empresa descargar matlab vector find compare

sesion - matlab usuario



Encontrar parte del vector en otro vector matlab (3)

Me gustaría saber si hay una manera fácil de encontrar los índices de un vector en otro vector en matlab:

a = [1 2 3 5 7 10 2 3 6 8 7 5 2 4 7 2 3] b = [2 3]

Entonces, ¿cómo obtener los índices de a cuando se compara con b (se necesita el índice del primer elemento)

En este caso:

ans = [2 7 16]

Gracias por adelantado


Enfoque general con una longitud de b arbitraria (no necesariamente 2 como en el ejemplo) y evitando el uso de cadenas:

match1 = bsxfun(@eq, a(:), b(:).''); %''// now we just need to make the diagonals %// horizontal (in order to apply "all" row-wise). For that we''ll use indices %// ind, ind1, ind2 ind = reshape(1:numel(match1), numel(a), numel(b)); ind1 = nonzeros(tril(ind)); %// source indices ind2 = sort(nonzeros(tril(flipud(ind)))); %// destination indices match2 = zeros(size(match1)); match2(ind2) = match1(ind1); %// diagonals have become horizontal result = find(all(match2.''));


Puede volver a strfind convirtiendo los elementos de ambos vectores en matrices de bytes ( uint8 ) con typecast :

bytesPerEl = numel(typecast(a(1),''uint8'')); byteLocs = strfind(char(typecast(a,''uint8'')),char(typecast(b,''uint8''))); locsb = (byteLocs-1)/bytesPerEl + 1 locsb = 2 7 16

Solo asegúrate de que a y b sean del mismo tipo. También tenga en cuenta que esto funciona para vectores 1D, no matrices o matrices dimensionales superiores.


find(a(1:end-1) == b(1) & a(2:end) == b(2) == 1)