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 Center および File ExchangeLogical についてさらに検索

タグ

製品


リリース

R2019b

Community Treasure Hunt

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

Start Hunting!

Translated by