# Extract only some specific elements of the arrays of a cell

20 views (last 30 days)
Hamed Jalali on 5 Apr 2022
Commented: Hamed Jalali on 5 Apr 2022
I have a cell, say C, where each array is also a cell. I have an index set and I want to extract cells 2, 5,1. It can be done by using . But it returns a cell where each cell is still a cell. What I want to know is how I can extract a new cell that contains cells 2,5, and 1 of the original cell, and also for each individual cell, it only contains cells 2,5, and 1. Therefore, the final cell is a cell and all individual cells are also a cell.

Stephen23 on 5 Apr 2022
C = arrayfun(@(n)num2cell(rand(1,5)),1:5,'uni',0)
C = 1×5 cell array
{1×5 cell} {1×5 cell} {1×5 cell} {1×5 cell} {1×5 cell}
C{:}
ans = 1×5 cell array
{[0.0326]} {[0.4440]} {[0.0083]} {[0.6590]} {[0.0110]}
ans = 1×5 cell array
{[0.2557]} {[0.8965]} {[0.0137]} {[0.0078]} {[0.5929]}
ans = 1×5 cell array
{[0.4589]} {[0.6418]} {[0.2742]} {[0.3274]} {[0.1927]}
ans = 1×5 cell array
{[0.9374]} {[0.0589]} {[0.0613]} {[0.5019]} {[0.8903]}
ans = 1×5 cell array
{[0.6602]} {[0.0461]} {[0.6398]} {[0.9363]} {[0.9559]}
X = [2,5,1];
D = cellfun(@(d)d(X),C(X),'uni',0)
D = 1×3 cell array
{1×3 cell} {1×3 cell} {1×3 cell}
D{:}
ans = 1×3 cell array
{[0.8965]} {[0.5929]} {[0.2557]}
ans = 1×3 cell array
{[0.0461]} {[0.9559]} {[0.6602]}
ans = 1×3 cell array
{[0.4440]} {[0.0110]} {[0.0326]}
Hamed Jalali on 5 Apr 2022
Thanks for this smart solution.

KSSV on 5 Apr 2022
C = cell(5,1) ;
for i = 1:5
C{i} = rand(1,3) ;
end
idx = [2 5 1] ;
iwant = C(idx)
iwant = 3×1 cell array
{[0.2284 0.3773 0.9742]} {[0.5814 0.1525 0.4597]} {[0.9464 0.0561 0.6506]}
Hamed Jalali on 5 Apr 2022
Each element of C is also a cell. If you cahnge C{i} = rand(1,3) ; to C{i} = rand(1,5) ; your final cell, iwant is a cell which each element is still double. I need all elements of the final cell be a cell/double.