[英]3D cell arrays in matlab
我目前正在使用Matlab,我已将一个csv文件上传到一个名为B的单元格数组中。现在我要做的就是将B的信息输入一个3-D单元格数组中,即该数组的第3维。是B的第一列,其字符串从“ chr1”到“ chr24”。 B的全长为m,任何“ chr”的最大长度为maxlength。 我怀疑这是最好的解决方法,但这是我的代码:
for j = 1:m ,
Ind = findstr(B{1}{j}, 'chr');
Num = B{1}{j}(Ind+3:end-1);
cnum = str2num(Num);
for i = 1:24,
if cnum == i;
for k = 2:9 ,
for l = 1:maxlength ,
C{l}{k}{i} = B{k}{j};
C{l}{k}{i}
end
end
end
end
end
由此产生的3-D数组与初始数组中的相应值不匹配。 我也想知道这是否是创建3-D数组的正确方法,我似乎在matlab网站上找不到关于它们的任何信息。 谢谢
您的方法可能存在一些问题:首先,Matlab索引不同于对表的C样式索引。 myCell{i}{j}
是单元格数组myCell
的第i个元素中包含的单元格数组的第j个元素。 如果要索引到myCell{i,j}
单元格数组中,则将在第i行第j列中的元素内容为myCell{i,j}
。
如果您的.csv文件的第2列到第9列包含所有数值数据,则可以更方便地使用一维单元格数组每个染色体的条目,或者使用2D或3D数字数组(如果有),对于每个染色体,分别为一行或一张表格。
这是一种方法
%# convert chromosomes to numbers
chromosomes = B{1};
chromosomes = strrep(chromosomes,'X',25);
chromosomes = strrep(chromosomes,'Y',26);
tmp = regexp(chromsomes,'chr(\d+)','tokens','once');
cnum = cellfun(@(x)str2double(x{1}),tmp);
%# catenate the rest of B into a 2D cell array
allNumbers = cell2mat(cat(2,B{2:end}));
%# now we can make a table with [chromosomeNumber,allOtherNumbers]
finalTable = [chromosomeNumber,allNumbers]
%# alternatively, if there are multiple entries for each chromosome, we can
%# group the data in a cell array, so that the i-th entry corresponds to chr.i
%# for readability, use a loop
outputCell = cell(26,1); %# assume 26 chromosomes
for i=1:26
outputCell{i} = allNumbers(cnum==i,:);
end
我已经设法仅使用两个for循环来执行此操作,这是我的代码:
C = zeros(26,8,maxlength);
next = zeros(1,26);
for j = 1:m ,
Ind = findstr(B{1}{j}, 'chr');
Num = B{1}{j}(Ind+3:end-1);
cnum = str2num(Num);
if Num == 'X'
cnum = 25;
end
if Num == 'Y'
cnum = 26;
end
next(cnum) = next(cnum) + 1;
for k = 2:9 ,
D{cnum}{k-1}{next(cnum)} = B{k}{j};
C(cnum,k-1,next(cnum)) = str2num(B{k}{j});
end
end
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.