Matrix sequence manipulation for multiple value assignment

조회 수: 1 (최근 30일)
woahs
woahs 2020년 1월 19일
답변: Matt J 2020년 1월 19일
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

답변 (2개)

Matt J
Matt J 2020년 1월 19일
편집: Matt J 2020년 1월 19일
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 2020년 1월 19일
e=1:numel(A);
lidx= any(idxes(:,1)<=e & e<=idxes(:,2),1);
A(lidx)=1;

카테고리

Help CenterFile Exchange에서 Multidimensional Arrays에 대해 자세히 알아보기

제품


릴리스

R2019a

Community Treasure Hunt

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

Start Hunting!

Translated by