访问Matlab中单元格数组的第n列

时间:2018-12-06 15:21:54

标签: matlab out-of-memory cell cell-array

我有一个单元格数组,其中有3个单元格,其中单元格是(3,8),(3,2),(3、30)矩阵,现在我想访问整个数据的第n列而不进行转换我的单元格到矩阵,例如,如果我搜索第8列,它必须是第3个单元格的第二列。一种方法是将其转换为矩阵,但是我的单元格太长,当我尝试将整个单元格转换为矩阵时,内存不足。然后我尝试了以下代码,但无法正常工作。我想知道我在做错什么。

感谢您的帮助。

function [col,i,idx] = find_cellCol(cel, idx)
lgh = length(cel);
i = 1;

me = zeros(2,length(cel));
while( i <= lgh && length(cel{1,i})<=idx)

idx = idx - length(cel{1,i});
i = i+1;

end%end while

if idx == 0
col = cel{1,i-1}(:,end);
else
col = cel{1,i}(:,idx);
end
end

1 个答案:

答案 0 :(得分:2)

仅获取每个单元格的每个矩阵的行数,然后将这些行数求和,并检查到第8行的夹心单元格。

%dummy data
x{1} = rand(3,8);
x{2} = rand(3,2);
x{3} = rand(3,20);

val   = 8;
csize = cellfun(@(x) size(x,1),x);    %get the number of line for each cell
csum  = cumsum(csize);                % [3,6,9]
ind   = find(csum>=val,1);            % on which cell do we reach the # line
x{ind}((val-csum(ind))+csize(ind),:)  %access the right line

fprintf('Accessing the line %d of the cell %d',(val-csum(ind))+csize(ind),ind)

哪个会返回:

Accessing the line 2 of the cell 3

编辑:

给出的示例误导了我,因为我确定您尝试访问的是行(第一维)而不是列(第二维)。

但是,如果您想访问一列,则可以简单地调整上面的代码:

val   = 8;
csize = cellfun(@(x) size(x,2),x);    %get the size of the second dimension now.
csum  = cumsum(csize);                
ind   = find(csum>=val,1);            
x{ind}(:,(val-csum(ind))+csize(ind))  %access the right column