我在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功能,但我无法理解它。请帮助。
答案 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])的影响是:
该图显示了为什么必须将矢量转换为矩阵。 (来自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.'}).'