我想知道在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]
提前致谢
答案 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
确保a
和b
属于同一类型。另请注意,这适用于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.'));