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)