MATLAB Answers

Translated by

このページのコンテンツは英語から自動翻訳されています。自動翻訳をオフにする場合は「<a class="turn_off_mt" href="#">ここ</a>」をクリックしてください。

Naime
0

find row with certain value and put in cell

Naime
さんによって質問されました 2019 年 2 月 18 日
最新アクティビティ Andrei Bobrov
さんによって 編集されました 2019 年 2 月 18 日
B=[ 1 2
1 5
2 3
2 4
2 5
3 4
4 5
4 7
4 9
5 6
6 11
6 12
6 13
7 8
7 9
9 10
9 14
10 11
12 13
13 14];
A= [1 0 1 0 1 0 1
1 0 1 0 1 0 1
0 1 0 0 0 0 0
0 1 1 0 1 0 1
1 0 0 0 0 0 0
0 1 0 0 0 0 0
0 0 1 0 0 0 0
0 0 0 1 0 0 0
0 0 0 1 1 0 1
0 0 0 0 1 0 1
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 1 1
0 0 0 0 0 0 0
0 0 0 1 0 0 0
0 0 0 0 1 0 0
0 0 0 0 0 0 1
0 0 0 0 1 0 0
0 0 0 0 0 1 0
0 0 0 0 0 0 1];
res=cell(1,size(A,2));
for i=1:size(A,2)
[row,~]=find(A(:,i)==1);
res{i}=B(row,:);
end
result= cellfun(@(x) unique(x),res,'UniformOutput',false);
I want to get this result={[1,2,5],[2,3,4],[1,2,4,5],[4,7,9],[1,2,4,5,6,9,10,11],[6,12,13],[1,2,4,5,6,9,13,14]}

  0 件のコメント

サインイン to comment.

タグ

3 件の回答

回答者: Jos (10584)
2019 年 2 月 18 日
 採用された回答

result = arrayfun(@(k) unique(B(A(:,k)==1,:)).', 1:size(A,2), 'un', 0)

  0 件のコメント

サインイン to comment.


回答者: adi kul
2019 年 2 月 18 日

Change last line to this:
result= cellfun(@(res) unique(res),res,'UniformOutput',false)
And let us know if this is what you were looking!

  0 件のコメント

サインイン to comment.


回答者: Andrei Bobrov
2019 年 2 月 18 日
編集済み: Andrei Bobrov
2019 年 2 月 18 日

z = B.*permute(A,[1,3,2]);
[~,jj] = ndgrid(1:size(A,1)*2,1:size(A,2));
out = accumarray(jj(:),z(:),[],@(x){unique(x(x~=0))});

  0 件のコメント

サインイン to comment.



Translated by