Indexing of cell array and a vector
5 views (last 30 days)
Show older comments
Sergio Rojas Blanco
on 2 Jun 2024
Commented: Sergio Rojas Blanco
on 3 Jun 2024
Hi guys, my problem has been raised before but with some differences.
I have a cell array of indexes, index. Its cells can be zero or vectors with several values. On the other hand I have a data vector, data. I need a cell array, out, that relates data to indexes, preferably without using a loop.
For example:
index = {[0], [0], [5], [0], [6, 7], [0], [0], [1], [0], [0], [0], [ 3]} ;
data = [100, 10, 20, 15, 11, 25, 200, 45];
Desired result:
out = {[0], [0], [11], [0], [25, 200], [0], [0], [100], [0], [0], [20]}
Can somebody help me?
4 Comments
Accepted Answer
Star Strider
on 2 Jun 2024
One approach —
index = {[0], [0], [5], [0], [6, 7], [0], [0], [1], [0], [0], [0], [ 3]} ;
data = [100, 10, 20, 15, 11, 25, 200, 45];
q = cellfun(@(x) data(x(x>0)), index, 'Unif',0);
Lvc = cellfun(@(x) all(x==0), index, 'Unif',0); % Using 'all' Is Necessary To Make The Logical Indices Work Correctly
out = index;
out(~[Lvc{:}]) = q(~[Lvc{:}])
.
2 Comments
More Answers (0)
See Also
Categories
Find more on Matrix Indexing 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!