String 如何用随机数替换数字串中的数字
我有一个字符串,它是0-9之间的数字序列,我想用随机数替换该字符串中的一些数字,但我无法使用String 如何用随机数替换数字串中的数字,string,matlab,random,String,Matlab,Random,我有一个字符串,它是0-9之间的数字序列,我想用随机数替换该字符串中的一些数字,但我无法使用rand或randi,因为我不断遇到以下错误: Conversion to char from cell is not possible. Error in work (line 58) mut(i,7:14) = {mute_by}; 以下是我目前正在尝试更改字符串的一些数字的操作: % mutate probability 0.2 if (r
rand
或randi
,因为我不断遇到以下错误:
Conversion to char from cell is not possible.
Error in work (line 58)
mut(i,7:14) = {mute_by};
以下是我目前正在尝试更改字符串的一些数字的操作:
% mutate probability 0.2
if (rand < 0.2)
% pick best chromosome to mutate
mut = combo{10};
mute_by = rand([0,9]);
for i = 1:5
mut(i) = {mute_by};
end
end
%变异概率0.2
如果(兰特<0.2)
%选择最好的染色体进行变异
mut=combo{10};
mute_by=rand([0,9]);
对于i=1:5
mut(i)={mute_by};
结束
结束
mut
表示字符串110202132224154246176368198100
我该怎么做呢?我认为这相当简单,但我已经查阅了文档一段时间了,我找不到解决方案。如果要替换字符串中的特定位置,则生成表示
true
的逻辑数组,否则将生成false
。如何确定这一点是通过生成与字符串大小相同的随机浮点数,并检查它们的值是否为<0.2
。对于字符串中满足此约束的任何位置,请将其替换为另一个随机整数
最好的方法是将字符串转换为实际数字,这样您就可以实际修改它们的数字位置,创建逻辑
数组,然后用这些坐标处的随机整数替换这些值
大概是这样的:
rng(123); %// Set seed for reproducibility
mut = '110202132224154246176368198100';
mut_num = double(mut) - 48;
n = numel(mut_num);
vec = rand(1, n) < 0.4;
num_elem = sum(vec);
mut_num(vec) = randi(10,1,num_elem) - 1;
mut_final = char(mut_num + 48);
vec
包含字符串中要更改的位置,从第2个位置开始,第3个位置,等。mut
中的相应位置相对于vec
发生变化,而字符串的其余部分未被触及,并最终存储在mut_final
中,因此您有一个字符串,如110202132224154246176368198100
,并希望更改其中20%的值。1) 你的意思是每个字符串的20%,还是以20%的概率更改每个数字(以便比例仅为平均值的20%)?2) 每一个随机的新数字应该在0到9之间均匀分布?这或多或少就是我键入的:-)你不需要用-48/+48转换整个向量;只需在新的基础上增加48entries@LuisMendo-好主意!谢谢
>> mut
mut =
110202132224154246176368198100
>> vec
vec =
Columns 1 through 13
0 1 1 0 0 0 0 0 0 1 1 0 0
Columns 14 through 26
1 1 0 1 1 0 0 0 0 0 0 0 1
Columns 27 through 30
1 1 1 0
>> mut_final
mut_final =
104202132444143248176368195610