Finding unique cell elements
43 visualizzazioni (ultimi 30 giorni)
Mostra commenti meno recenti
I have a list as given below:
A= {[1 2], [2 1], [2 1 3],[3 4],[4 3]}
I need to simplify the matrix. For example, [3 4] and [4 3] form the same combination, only one of them is enough. Also, [1 2] and [2 1] is the same combinations, so I should be left with
newA= {[1 2],[2 1 3],[3 4]}
How do I do that?
0 Commenti
Risposta accettata
Stephen23
il 14 Nov 2017
Modificato: Stephen23
il 14 Nov 2017
We can take advantage of the fact that unique accepts a cell array of char vectors, which means we can convert those numeric vectors to char and then the task is trivial, assuming that the order is not significant:
>> A = {[1,2],[2,1],[2,1,3],[3,4],[4,3]};
>> B = cellfun(@(v)sort(char(v)),A,'uni',0);
>> C = cellfun(@double,unique(B),'uni',0);
>> C{:}
ans =
1 2
ans =
1 2 3
ans =
3 4
1 Commento
majid huhu
il 12 Lug 2021
If you got column vectors in cell array, you would probably get some like below error after running this solution.
Error using cell/unique>celluniqueR2012a (line 249)
Elements of cell array input A must be character vectors (row vectors of class char).
Error in cell/unique (line 89)
[varargout{1:nlhs}] = celluniqueR2012a(varargin{:});
Then you should convert all the items to row vectors and then perform such solution.
for i = 1 : numel(A)
A{i} = A{i}';
end
%% A = {[1; 2; 3], ...} --> A = {[1, 2, 3], ...}
>> A = {[1,2],[2,1],[2,1,3],[3,4],[4,3]};
>> B = cellfun(@(v)sort(char(v)),A,'uni',0);
>> C = cellfun(@double,unique(B),'uni',0);
Più risposte (0)
Vedere anche
Categorie
Scopri di più su Data Type Conversion in Help Center e File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!