Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/performance/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/matlab/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Performance Matlab:在列中存在重复值时删除行_Performance_Matlab - Fatal编程技术网

Performance Matlab:在列中存在重复值时删除行

Performance Matlab:在列中存在重复值时删除行,performance,matlab,Performance,Matlab,当列相同时,我在删除行时遇到问题 我使用了for和if循环,但运行时间太长 我在想是否有更高效、更快的运行时方法。 说 A=[2 4 6 8; 3 9 7 9; 4 8 7 6; 8 5 4 6; 2 10 11 2] 我希望结果是 A=[ 2 4 6 8; 4 8 7 6; 8 5 4 6] 因为重复的“9”而删除第2行,因为重复的“2”而删除第5行。这里的技巧是如何高效地找到具有重复值的行。 这个怎么样: % compare all-vs-all for each row

当列相同时,我在删除行时遇到问题

我使用了for和if循环,但运行时间太长

我在想是否有更高效、更快的运行时方法。 说

A=[2 4 6 8;
3 9 7 9;
4 8 7 6;
8 5 4 6;
2 10 11 2]

我希望结果是

A=[ 2 4 6 8;
    4 8 7 6;
    8 5 4 6]

因为重复的“9”而删除第2行,因为重复的“2”而删除第5行。

这里的技巧是如何高效地找到具有重复值的行。
这个怎么样:

% compare all-vs-all for each row using `bsxfun`
>> c = bsxfun( @eq, A, permute( A, [1 3 2] ) );
>> c = sum( c, 3 ); % count the number of matches each element has in the row
>> c = any( c > 1, 2 ); % indicates rows with repeated values - an element with more than one match
>> A = A( ~c, : )
 A =
  2     4     6     8
  4     8     7     6
  8     5     4     6

这里的诀窍是如何高效地找到具有重复值的行。
这个怎么样:

% compare all-vs-all for each row using `bsxfun`
>> c = bsxfun( @eq, A, permute( A, [1 3 2] ) );
>> c = sum( c, 3 ); % count the number of matches each element has in the row
>> c = any( c > 1, 2 ); % indicates rows with repeated values - an element with more than one match
>> A = A( ~c, : )
 A =
  2     4     6     8
  4     8     7     6
  8     5     4     6

您可以使用
sort
diff
来识别具有重复值的行

A = A(all(diff(sort(A'))),:)
返回

A =
     2     4     6     8
     4     8     7     6
     8     5     4     6

您可以使用
sort
diff
来识别具有重复值的行

A = A(all(diff(sort(A'))),:)
返回

A =
     2     4     6     8
     4     8     7     6
     8     5     4     6

您的原始矩阵是A(5X4)。从其他3列中减去第1列。删除元素为0的行。从右边的两列中减去第二列(在新矩阵中)。删除元素为0的行。从右边的1列中减去第3列。再次删除行。现在将结果矩阵中的第一列添加到所有其他列。将第二列添加到右侧的列中。继续获取所需矩阵。原始矩阵为(5X4)。从其他3列中减去第1列。删除元素为0的行。从右边的两列中减去第二列(在新矩阵中)。删除元素为0的行。从右边的1列中减去第3列。再次删除行。现在将结果矩阵中的第一列添加到所有其他列。将第二列添加到右侧的列中。继续获取所需矩阵。嘿,感谢您的回复,此方法确实减少了运行时间。@user2573873欢迎使用stackoverflow。如果你发现这个答案是有用的,请考虑点击“接受”它旁边的“V”图标。嘿,谢谢你的回复,这个方法确实缩短了运行时间。@ USER 257338欢迎到StAccess。如果你发现这个答案是有用的,请考虑点击它旁边的“V”图标来“接受”它。