gpt4 book ai didi

matlab - 在matlab中访问单元格数组的第n列

转载 作者:行者123 更新时间:2023-12-04 01:49:53 25 4
gpt4 key购买 nike

我有一个单元格数组,例如包含 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

最佳答案

仅获取每个单元格的每个矩阵的行数,然后将这些行数相加并检查到达第 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

关于matlab - 在matlab中访问单元格数组的第n列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53654538/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com