在另一个矢量matlab中找到矢量的一部分

时间:2014-04-02 03:16:43

标签: matlab vector find compare

我想知道在matlab中是否有一种简单的方法可以在另一个向量中找到向量的索引:

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

那么在与 b 进行比较时如何获得 a 的指数(需要第一个元素的索引)

在这种情况下:

ans = [2 7 16]

提前致谢

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:2)

您可以通过使用strfind将两个向量的元素转换为字节数组(uint8)来重新定位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

确保ab属于同一类型。另请注意,这适用于1D向量,而不是矩阵或更高维数组。

答案 2 :(得分:1)

长度为b的一般方法是任意的(不一定是示例中的2),并且避免使用字符串:

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.'));