Indexing a cell array according to another cell array

1 回表示 (過去 30 日間)
alicia che
alicia che 2016 年 3 月 24 日
編集済み: Andrei Bobrov 2016 年 4 月 5 日
So I have two cell arrays, each represent onset and offset times of events, so they have the same size and they correspond to each other, for example:
A = {[2,3,4],[3,6],[5,7,9,10]};
B = {[2.5,4.2,4.7],[3.2,7.4],[6.2,7.6,9.4,11.3]}
I now was able to delete certain entries in A according to a different indexing vector c,let's say new A is (anything equals to 3 or between 7 to 9 is deleted):
A = {[2,4],[6],[5,10]}
How do I delete the corresponding entries in B? I want to achieve:
B = {[2.5,4.7],[7.4],[6.2,11.3]}
In other words delete the second, first, and second and third entires in the three cells in B. I tried to do it after entries were deleted from A, but the sizes and entries no longer match. It seems I have to somehow index A and B at the beginning before I mess with A, but I am not sure how to do this...

採用された回答

Andrei Bobrov
Andrei Bobrov 2016 年 4 月 5 日
編集済み: Andrei Bobrov 2016 年 4 月 5 日
n = repelem(1:numel(A),cellfun(@numel,A));
B1 = [B{:}];
A1 = [A{:}];
t = A1 ~= 3 & (A1 < 7 | A1 > 9);
out = accumarray(n(t)',B1(t),[],@(x){x});
or
n = repelem(1:numel(A),cellfun(@numel,A))';
C = [n(:),[A{:}]',[B{:}]'];
C = C(C(:,2) ~= 3 & (C(:,2) < 7 | C(:,2) > 9),:);
[ii,jj] = ndgrid(C(:,1),1:2);
out = accumarray([ii(:),jj(:)],reshape(C(:,2:3),[],1),[],@(x){x});

その他の回答 (1 件)

Azzi Abdelmalek
Azzi Abdelmalek 2016 年 3 月 24 日
A = {[2,3,4],[3,6],[5,7,9,10]};
B = {[2.5,4.2,4.7],[3.2,7.4],[6.2,7.6,9.4,11.3]}
idx=cellfun(@(x) x~=3 & ~(x<=9 & x>=7),A,'un',0)
C1=cellfun(@(x,y) x(y),A,idx,'un',0)
C2=cellfun(@(x,y) x(y),B,idx,'un',0)
celldisp(C1)
celldisp(C2)
  10 件のコメント
alicia che
alicia che 2016 年 4 月 5 日
I was using
A1=cellfun(@(x) x(~ismember(x,find(C))),A,'uni',false)
but it returns the final result I want but not index like your code did, so I can't apply it to B,and not sure how to fix it.
Azzi Abdelmalek
Azzi Abdelmalek 2016 年 4 月 5 日
To make your question clear, post an example and explain clearly what you want, and post the expected result

サインインしてコメントする。

カテゴリ

Help Center および File ExchangeMatrix Indexing についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by