필터 지우기
필터 지우기

Use array values as assignment indecis

조회 수: 1 (최근 30일)
Gabriel Stanley
Gabriel Stanley 2022년 11월 23일
댓글: Matt J 2023년 5월 8일
A = N-by-2 array, wherein A(:,1)<A(:,2)
B = M-by-2 array, wherein B(:,1)<B(:,2)
A and B are essentially time stamps.
C = unique(vertcat(A,B));
[~,D] = ismember(A,C);
[~,E] = ismember(B,C);
C([D(1,1):D(1,2),...D(N,1):D(N,2)],2) = any scalar, or an array with a sufficient number of elements to dstribute.
C([E(1,1):E(1,2),...E(N,1):E(N,2)],3) = any scalar, or an array with a sufficient number of elements to dstribute.
I'm hung up on defining those assignment indecis [D(1,1):D(1,2),...D(N,1):D(N,2)] without using a loop, i.e.
IdcsD = double.empty;
for i=1:size(D,1)
Idcs = [Idcs,[D(i,1):D(i,2)]];
end
C(IdcsD) = Value;
  댓글 수: 3
Matt J
Matt J 2022년 11월 23일
Please show an example for small N and showing the desired output D.
Gabriel Stanley
Gabriel Stanley 2022년 11월 23일
편집: Gabriel Stanley 2022년 11월 23일
Value is a scalar, while OBE

댓글을 달려면 로그인하십시오.

채택된 답변

Matt J
Matt J 2022년 11월 23일
편집: Matt J 2022년 11월 23일
The question has nothing to do really with ismember. It's more about how to turn a list of interval end points into indices. One way is as follows:
D=[1 5 9;
2 7 12]' %interval end points
D = 3×2
1 2 5 7 9 12
C=rand(1,12);
nc=length(C);
assert(all(diff(D,1,2)>=0) & all(D(:)>0) & all(D(:)<=nc) ,'Invalid data present')
D=D+[0,1]; s=0*D+[1,-1];
csum=cumsum( accumarray(D(:),s(:),[nc+1,1]) );
Idcs=logical(csum(1:end-1))',
Idcs = 1×12 logical array
1 1 0 0 1 1 1 0 1 1 1 1
Idcs=find(Idcs) %Shouldn't be needed. Use logical indices above.
Idcs = 1×9
1 2 5 6 7 9 10 11 12
  댓글 수: 5
Gabriel Stanley
Gabriel Stanley 2023년 5월 8일
So in the case of the interval end points of D defining a subset of some larger data set C, nC should be set to the maximum index of the relevant dimension in C?
Matt J
Matt J 2023년 5월 8일
The dimension/shape of C seems irrelevant to this task. I think you would just flatten C to C(:) and apply the code above as is.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

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

태그

제품


릴리스

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by