matlab中的三维单元阵列

matlab中的三维单元阵列,matlab,Matlab,我目前正在使用matlab工作,我已经将一个csv文件上传到一个我命名为B的单元格数组中。我现在想做的是将B的信息输入到一个三维单元格数组中,数组的第三维是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(N

我目前正在使用matlab工作,我已经将一个csv文件上传到一个我命名为B的单元格数组中。我现在想做的是将B的信息输入到一个三维单元格数组中,数组的第三维是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
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
由此产生的三维数组与初始数组中的相应值不匹配。我还想知道这是否是创建三维阵列的正确方法,我在matlab网站上似乎找不到关于它们的任何信息。
谢谢

我只用了两个for循环就做到了这一点,下面是我的代码:

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
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

您的方法可能存在一些问题:首先,Matlab索引不同于c风格的表索引
myCell{i}{j}
是单元格数组的第j个元素,包含在单元格数组的第i个元素
myCell
中。如果您想索引到一个二维单元格数组中,您将获得第i行第j列中元素的内容,如
myCell{i,j}

如果.csv文件的第2列到第9列包含所有数字数据,则使用带有每个染色体条目的1D单元格数组或使用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

其余的数据是数字的吗?是的,我发布的以下代码将其放入三维单元格数组和三维矩阵中。