随机交换字符序列(Matlab)

Swap characters in sequence randomly (Matlab)

我有一个输入值是一组序列如下:

{ 'ABCDE'
  'ABCD'
  'ABE'
  'ABCDE'
  'ABD'
  'ABCD'
  'ABCDE' }

我尝试在 3 个随机序列中交换 'A' 和 'B',并保持其他序列不变。谁能有什么建议?

可能的解决方案

A={ 'ABCDE'
  'ABCD'
  'ABE'
  'ABCDE'
  'ABD'
  'ABCD'
  'ABCDE' };

N = numel(A);

for r = randperm(N,3)
    A(r) = A{r}([2 1 3:end]);
end

for r = randperm(N,3)
    A{r}(1:2) = A{r}([2 1]);
end

randperm(N,3)1:N

中选择 3 个随机值

然后通过索引 [2 1 3:end] 我们可以交换第一个和第二个元素

如果您不想 for loop 而是有一个额外的数据转换步骤,从 cellchar 然后从 char 返回到 cell,这将解决您的问题:

N = numel(A);
r = randperm(N,3);
A = char(A);
A(r,[1,2]) = A(r,[2,1]);
A = cellstr(A);