我的阵列很大。为了简单起见,我们将其简化为:
A = [1 1 1 1 2 2 3 3 3 3 4 4 5 5 5 5 5 5 5 5];
因此,存在一组1(4个元素),2(2个元素),3(4个元素),4(2个元素)和5(8个元素)。现在,我只想保留属于3个或更多元素组的列。因此它将像:
B = [1 1 1 1 3 3 3 3 5 5 5 5 5 5 5 5];
我正在使用for循环来进行此操作,分别扫描1、2、3等,但是对于大型数组,它的速度非常慢...
感谢您提供任何有关如何以更有效的方式进行操作的建议:)
艺术。
最佳答案
这是我的两类轮
counts = accumarray(A', 1);
B = A(ismember(A, find(counts>=3)));
accumarray用于计算A的各个成员。find提取满足“3个或更多元素”条件的那些。最后,ismember告诉您它们在A中的位置。请注意,A不需要排序。当然,accumarray仅适用于A中的整数值。