Avoiding for loop with ismember
2 visualizaciones (últimos 30 días)
Mostrar comentarios más antiguos
Christian
el 23 de Jun. de 2017
Editada: Andrei Bobrov
el 23 de Jun. de 2017
Hi, suppose N is a scalar, and c is a numerical vector with unique elements that are a subset of 1:N, i.e. its size is smaller or equal to N. For example, N=4, and c=[1 2 4]'; Then, is there a more elegant way to achieve this?
cc = [];
for j = 1:N
if ismember(j,c)
cc = [cc; N*(j-1)+c];
end
end
Thanks!
2 comentarios
Respuesta aceptada
Andrei Bobrov
el 23 de Jun. de 2017
Editada: Andrei Bobrov
el 23 de Jun. de 2017
[Fixed]
N = 15;
c = randperm(N,4);
c1 = sort(c(:));
cc = reshape(bsxfun(@plus,N*(c1 - 1),c1')',[],1);
or
oc = ones(numel(c1),1);
cc = N*(kron(c1,oc) - 1) + kron(oc,c1);
or
c = c(:);
nn = numel(c);
cc = N*(repelem(c,nn) - 1) + repmat(c,nn,1);
6 comentarios
Stephen23
el 23 de Jun. de 2017
@Christian: With the data you have shown us cc will definitely be a matrix. If c is a column vector then you should specify this in your question.
Más respuestas (0)
Ver también
Categorías
Más información sobre Loops and Conditional Statements en Help Center y File Exchange.
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!