Two cell arrays indexing

4 views (last 30 days)
Ko Fa
Ko Fa on 10 Nov 2020
Commented: Ko Fa on 11 Nov 2020
I have two cell Arays, lets say
A = {[],[],[2,3],[1,2]}
B = {[1,2,3],[4,5],[6,7,8],[9,10,11]}
"A" contains the Index of the numbers I am trying to get out of "B". So the [2,3] from A corresponds to the numbers [7,8] from B.
Now I would like my output to be:
output = {[],[],[7,8],[9,10]}
My original data is much larger than this, so ideally a general solution would be great.
Any help is greatly appreciated.

Accepted Answer

dpb
dpb on 10 Nov 2020
Edited: dpb on 10 Nov 2020
C=cellfun(@(a,b)b(a),A,B,'UniformOutput',false);
It's just logical indexing in a background loop under the guise of cell addressing. Seems more complicated than actually is.
>> C=cellfun(@(a,b)b(a),A,B,'UniformOutput',false);
>> C{:}
ans =
[]
ans =
[]
ans =
7 8
ans =
9 10
>>
  1 Comment
Ko Fa
Ko Fa on 11 Nov 2020
Thank you! I did come up with this solution myself after some time:
V = cell(1,length(A));
k = 1;
for i = 1:length(A)
V{k} = B{i}([A{i}]);
k = k+1;
end
C = V
Certainly your solution is more advanced and I will be using it.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

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

Start Hunting!