MATLAB Answers

Matrix sequence manipulation for multiple value assignment

2 views (last 30 days)
woahs
woahs on 19 Jan 2020
Answered: Matt J on 19 Jan 2020
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

  0 Comments

Sign in to comment.

Answers (2)

Matt J
Matt J on 19 Jan 2020
Edited: Matt J on 19 Jan 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))

  0 Comments

Sign in to comment.


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

  0 Comments

Sign in to comment.

Sign in to answer this question.

Products


Release

R2019a