我有一个单元格数组,其中有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
答案 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