计算矩阵中的行数-Matlab

计算矩阵中的行数-Matlab,matlab,vectorization,Matlab,Vectorization,我已经寻找了很长一段时间了,但是我仍然没有找到一种有效计算矩阵行数的方法。有一些解决方案,但没有一个能满足我的需求。上面的代码可以完成这项工作,但是如果您处理的是一个大矩阵,则需要花费太多的时间。我想要的输出与变量cont2一样,即长度等于a中行数的向量。下面是一个示例: A = [ 1 2 3 ; 4 3 5; 1 2 3; 1 2 3; 4 3 5; 5 2 1; 3 2 1; 3 5 1]; [rows,~] = size(A); cont2 = zeros(ro

我已经寻找了很长一段时间了,但是我仍然没有找到一种有效计算矩阵行数的方法。有一些解决方案,但没有一个能满足我的需求。上面的代码可以完成这项工作,但是如果您处理的是一个大矩阵,则需要花费太多的时间。我想要的输出与变量cont2一样,即长度等于a中行数的向量。下面是一个示例:

    A = [ 1 2 3 ; 4 3 5; 1 2 3; 1 2 3; 4 3 5; 5 2 1; 3 2 1; 3 5 1];

    [rows,~] = size(A);
    cont2 = zeros(rows,1,'single');

    for i = 1:rows
        cont = 0;
        for j = 1:rows

            if A(i,:) == A(j,:)
                cont = cont + 1;
            end

            cont2(i) = cont;
        end
    end
%结果: cont2=

     3
     2
     3
     3
     2
     1
     1
     1
来点怎么样

这会将每一行相互比较,并对匹配的数量求和,以生成所需的结果


同样,您可以使用将每一行缩减为唯一的整数标签,然后比较这些标签:

[~, ~, u] = unique(A, 'rows');
result = sum(bsxfun(@eq, u, u.'), 2);

或用于计算每个标签出现的次数:

[~, ~, u] = unique(A, 'rows');
c = histc(u, 1:max(u));
result = c(u);
[~, ~, u] = unique(A, 'rows');
c = histc(u, 1:max(u));
result = c(u);