【问题标题】:How to convert a character matrix into cell array?如何将字符矩阵转换为元胞数组?
【发布时间】:2014-09-25 02:31:00
【问题描述】:

我在 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 函数,但我无法理解它。请帮助。

【问题讨论】:

标签: arrays matlab matrix


【解决方案1】:

使用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'

【讨论】:

    【解决方案2】:

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

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

    第一个维度是1,第二个维度是一串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】:

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

      M = vec2mat(A, numberOfColumns) 
      

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

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

      这意味着所有的 cels 将有 1 行 4 列)。

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

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

      【讨论】:

      • 非常漂亮的图表。 +1
      【解决方案4】:

      您还可以(ab)使用非常通用的accumarray 来完成此任务:

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

      【讨论】:

      • thank u..这里的n是表示字符串的个数还是大小?
      • 每个字符串的大小。我在你的例子中选择了 4
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-07
      • 2015-03-15
      相关资源
      最近更新 更多