假设我有一个带有此值的1x1单元格:'atcatcaaca'。 我的目标是:
在任何't'旁边添加一个随机数't'。
例如我有'atcatcaaca'。我的目标是让它成为:'aaaattttcccaattttccaaaaaaaaacaccccccccaa'
我的想法是取值单元格并以某种方式将其拆分为矩阵: a | t | a | t | c | a | a | c |一个。 有可能吗?如果可能的话,怎么样?
代码是:
filename = fullfile(matlabroot,'virus_nucleotitde2.dat');
Z = readtable(filename);
S = table2cell(Z);
num_rows = size (Z,1);
num_cols = size (Z,2);
for i=1:1:num_rows
for j=1:1:num_cols
B = S(i,j);
a=0;
c=0;
g=0;
t=0;
B{1} = num2cell(B{1});
n = randi(6); % Random number between 1 and 6
B{1} = strrep(B{1} , 'a' , repmat('a' , 1, n));
n = randi(11); % Random number between 1 and 11
B{1} = strrep(B{1} , 'c' , repmat('c' , 1, n));
n = randi(11);
B{1} = strrep(B{1} , 'g' , repmat('g' , 1, n));
n = randi(11);
B{1} = strrep(B{1} , 't' , repmat('t' , 1, n));
end
end
答案 0 :(得分:0)
它已经是这样.. 'a string'
是一个字符数组,所以为了将它们转换为单元格数组,你需要使用通常的num2cell
函数:
>> name_in_1x1_cell_array{1} = 'ataggatag'
name_in_1x1_cell_array =
'ataggatag'
>> name_in_1x1_cell_array{1} = num2cell(name_in_1x1_cell_array{1})
name_in_1x1_cell_array =
{1x9 cell}
您也可以直接访问字符,例如,您可以循环字符串的每个字符并显示它:
name = 'some name';
for i = 1 : length(name)
disp(name(i));
end
答案 1 :(得分:0)
在单元格内部,您可以使用大括号访问char
:
S = {'ataggatag'};
B = S{1};
disp(B)
然后,strrep
是你的朋友:
n = randi(6); % Random number between 1 and 6
B = strrep(B , 'a' , repmat('a' , 1, n));
n = randi(11); % Random number between 1 and 11
B = strrep(B , 'c' , repmat('c' , 1, n));
n = randi(11);
B = strrep(B , 'g' , repmat('g' , 1, n));
n = randi(11);
B = strrep(B , 't' , repmat('t' , 1, n));
然后把它放回细胞
S{1} = B;
disp(S)
请注意,我使用6作为'a'的最大数量,因为strrep
将替换原来的a,而不是在你问的旁边添加字母。
编辑:
在OP编辑之后,这是您的解决方案:
S = {'ataggatag'};
num_rows = size (S,1);
num_cols = size (S,2);
for i=1:1:num_rows
for j=1:1:num_cols
n = randi(6); % Random number between 1 and 6
S{i,j} = strrep(S{i,j} , 'a' , repmat('a' , 1, n));
n = randi(11); % Random number between 1 and 11
S{i,j} = strrep(S{i,j} , 'c' , repmat('c' , 1, n));
n = randi(11);
S{i,j} = strrep(S{i,j} , 'g' , repmat('g' , 1, n));
n = randi(11);
S{i,j} = strrep(S{i,j} , 't' , repmat('t' , 1, n));
end
end
disp(S)
答案 2 :(得分:0)
根据您的描述,而不是代码:
使用函数strrep
这很简单,因为它也在单元数组上运行:
cell_string = {'atcatcaaca'};
% add a's
cell_string = strrep(cell_string, 'a', repmat('a',1,5));
% add c's
cell_string = strrep(cell_string, 'c', repmat('c',1,10));
% add t's
cell_string = strrep(cell_string, 't', repmat('t',1,randi(10)));
函数repmat
用于复制字符。