MATLAB:检查相同的列,并添加噪声使它们不相同

use*_*ica -1 matlab

我有一个MATLAB双数组(通常是3x151,但大小可能会改变),我想检查是否有任何列在它们中具有完全相同的值,顺序相同.

例如,在以下数组中,第1列和第2列是重复的,但第3列则不是.

[ 3    3    2 ; 
  2    2    2 ;
  2    2    3 ]
Run Code Online (Sandbox Code Playgroud)

如果找到重复的列,我想添加少量噪音(可能只添加到其中一列),以确保它们不再重复.

实现这一目标的最有效方法是什么?

Dan*_*iel 5

首先,您必须确定重复的列.最有效的方法是使用unique,它以两种方式为您提供相反的方式,即唯一行的列表.使用transpose和setdiff来获取重复的列:

M=[ 3    3    2;    2    2    2;   2    2    3];
[~,unique_cols,~]=unique(M.','rows');
duplicate_cols=setdiff(1:size(M,2),unique_cols);
Run Code Online (Sandbox Code Playgroud)

现在识别出重复的列,生成噪声并添加它:

M(:,duplicate_cols)=M(:,duplicate_cols)+rand(size(M,1),numel(duplicate_cols));
Run Code Online (Sandbox Code Playgroud)

如果您想100%确定获取唯一值,请运行代码直到unique_rows为空.非常糟糕的运气rand可能会重复值,但对于您可能永远不会发生的小数据集.