我有一个MATLAB双数组(通常是3x151,但大小可能会改变),我想检查是否有任何列在它们中具有完全相同的值,顺序相同.
例如,在以下数组中,第1列和第2列是重复的,但第3列则不是.
[ 3 3 2 ;
2 2 2 ;
2 2 3 ]
Run Code Online (Sandbox Code Playgroud)
如果找到重复的列,我想添加少量噪音(可能只添加到其中一列),以确保它们不再重复.
实现这一目标的最有效方法是什么?
首先,您必须确定重复的列.最有效的方法是使用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可能会重复值,但对于您可能永远不会发生的小数据集.
| 归档时间: |
|
| 查看次数: |
50 次 |
| 最近记录: |