How to vectorize strfind
2 views (last 30 days)
Is it possible to use strfind in a vectorized way? Suppose I want to get find not just one pattern inside a string, but several of them at the same time, so that the output would not be a vector of indexes, but a matrix: is it possible?
Concretely, take a string 'TRSDGHNENJRRDSENTRFDGDGT'. I want to find 'TR', 'DG', and 'EN'. The output of the function would be a matrix 3 x length(string) where line one are zeros and ones at indexes relative to 'TR', line two for 'DG' and line three for 'EN'. Possible?
The purpose is to avoid a for loop which even with pre-allocation is time-consuming. But I actually don't even know if this vectorization I am thinking of would be quicker.
Walter Roberson on 22 Dec 2016
S = 'TRSDGHNENJRRDSENTRFDGDGT';
targets = ['TR'; 'DG'; 'EN'];
output = [targets(:,1) == S(1:end-1) & targets(:,2) == S(2:end), false(size(targets,1),1)];
In earlier versions you would need to use bsxfun()