String 如何用随机数替换数字串中的数字

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

我有一个字符串,它是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 (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