如何将字符矩阵转换为单元格数组?

时间:2014-09-24 17:11:32

标签: arrays matlab matrix

我在4 * 4矩阵中有64个字符。我需要将其转换为单元格数组,使得单元格有4个字符。例如

 Consider A=[TCTGCTCTCGGTTATATACACTGCCCAGAACACGTCAACAAGGCCAGTGTATCCTTCTTTGTGT]

我需要获得一个单元格数组,如下所示

 B={[TCTG][CTCT][CGGT][TATA]
    [TACA][CTGC][CCAG][AACA]
    [CGTC][AACA][AGGC][CAGT]
    [GTAT][CCTT][CTTT][GTGT]}

我尝试使用mat2cell功能,但我无法理解它。请帮助。

4 个答案:

答案 0 :(得分:2)

使用for循环:

clc
clear

A = 'TCTGCTCTCGGTTATATACACTGCCCAGAACACGTCAACAAGGCCAGTGTATCCTTCTTTGTGT';


B = cell(4,4);

currentIdx = 0; % Use index to increment by steps of 4 when going through A

for k = 1:16        
    B{k} = A(currentIdx+1:currentIdx+4);
    currentIdx = currentIdx+4;
end

B = B'

B = 

    'TCTG'    'CTCT'    'CGGT'    'TATA'
    'TACA'    'CTGC'    'CCAG'    'AACA'
    'CGTC'    'AACA'    'AGGC'    'CAGT'
    'GTAT'    'CCTT'    'CTTT'    'GTGT'

答案 1 :(得分:2)

您可以使用将输入向量分解为矩阵的方法vec2mat

M = vec2mat(A, numberOfColumns) 

(在你的情况下numberOfColumns将是16)然后使用mat2cell。在你的情况下,它将是:

C = mat2cell(M, [1,1,1,1], [4,4,4,4]) 

这意味着所有cels将有一行和4列)。

函数c = mat2cell(x,[10,20,30],[25,25])的影响是:

img

该图显示了为什么必须将矢量转换为矩阵。 (来自matlab文档的例子)

答案 2 :(得分:2)

您从1xN矩阵开始,并希望将其转换为1x4矩阵的1xN / 4单元阵列。那么你的命令应该是:

N = length(A);
M = 4;
B = mat2cell(A,1,ones(1,N/M)*M);

第一个维度是1,第二个维度是输出单元阵列大小的4到4的字符串。结果:

B = 

  Columns 1 through 12

    'TCTG'    'CTCT'    'CGGT'    'TATA'    'TACA'    'CTGC'    'CCAG'    'AACA'    'CGTC'    'AACA'    'AGGC'    'CAGT'

  Columns 13 through 16

    'GTAT'    'CCTT'    'CTTT'    'GTGT'

答案 3 :(得分:2)

您还可以(ab)使用功能多样的accumarray执行此任务:

A = 'TCTGCTCTCGGTTATATACACTGCCCAGAACACGTCAACAAGGCCAGTGTATCCTTCTTTGTGT';
n = 4;
B = accumarray(ceil(1/n:1/n:numel(A)/n).', A(:), [], @(x) {x.'}).'