Matrix sequence manipulation for multiple value assignment

2 visualizzazioni (ultimi 30 giorni)
Is there a quick (& simple) way to do the following without a loop? Not even sure why I don't want loops but still figured it'd be nice to know if there was a way. Feels like something obvious I'm just not thinking of..
I have an array and a matrix of indices, e.g.
A = zeros(20, 1);
idxes = [1, 5; ...
10, 13; ...
19, 20];
and I'd like to convert it such that the following is achieved without hardcoding in the indices:
A([1:5, 10:13, 19:20]) = 1;
Equivalent solution with a loop:
for i = 1:size(idxes, 1)
A(idxes(i, 1):idxes(i, 2)) = 1
end

Risposte (2)

Matt J
Matt J il 19 Gen 2020
Modificato: Matt J il 19 Gen 2020
If the intervals will always be disjoint,
A=zeros(20,1);
n=numel(A);
A(idxes(:,1))=1; A(idxes(:,2)+1)=-1;
A=cumsum(A(1:n))

Matt J
Matt J il 19 Gen 2020
e=1:numel(A);
lidx= any(idxes(:,1)<=e & e<=idxes(:,2),1);
A(lidx)=1;

Prodotti


Release

R2019a

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by