How to take number between two nested cell arrays
Show older comments
Hi,
I have two nested cell arrays
A = {[27,28,30,31]},{[26,25,30]},{[33,29,31,27,28]};
B = {[30,64,72,85]},{[15,33,62]},{[45,62,77,84,90]};
How can I take a max value of all entry nested in A and pick a value in B which corresponds to the max value of A?
so the result will be:
C = 33
D = 45
Thank you
Answers (2)
KSSV
on 6 Jul 2021
A = {[27,28,30,31],[26,25,30],[33,29,31,27,28]};
B = {[30,64,72,85],[15,33,62],[45,62,77,84,90]};
A = cell2mat(A) ;
B = cell2mat(B) ;
[val,idx] = max(A) ;
iwant = B(idx)
2 Comments
Ahmad Bayhaqi
on 6 Jul 2021
KSSV
on 6 Jul 2021
Wy you want to put extra cell braces in there?
You can do the following (the code you gave above is NOT a nested cell):
A = {{[27,28,30,31]},{[26,25,30]},{[33,29,31,27,28]}};
B = {{[30,64,72,85]},{[15,33,62]},{[45,62,77,84,90]}};
A1= []; B1=[];
for i=1:length(A)
A1 = [A1 A{i}{1}];
B1 = [B1 B{i}{1}];
end
[C, id] = max(A1)
D = B1(id)
6 Comments
Ahmad Bayhaqi
on 6 Jul 2021
Chunru
on 6 Jul 2021
What are exactly your A and B?
Ahmad Bayhaqi
on 6 Jul 2021
Edited: Ahmad Bayhaqi
on 6 Jul 2021
Chunru
on 6 Jul 2021
You are having column vector in cell arraý instead of row vector. So you shoud use: A1 = [A1; A{i}{1}]; B1 = [B1; B{i}{1}];
Ahmad Bayhaqi
on 6 Jul 2021
Chunru
on 6 Jul 2021
Your data is in a mixed format. Some elements are cells and some are arrays. Some are row vector and some are column vector. This cause the problem.
The following take care of these problems:
load('A', 'A');
load('B', 'B');
A1= []; B1=[];
for i=1:length(A)
if iscell(A{i})
A1 = [A1; A{i}{1}(:)];
B1 = [B1; B{i}{1}(:)];
else
A1 = [A1; A{i}(:)];
B1 = [B1; B{i}(:)];
end
end
[C, id] = max(A1)
D = B1(id)
Categories
Find more on Data Type Conversion in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!