【问题标题】:Summing across rows of a matrix instead of columns对矩阵的行而不是列求和
【发布时间】:2012-10-07 10:45:01
【问题描述】:

我有一个 21x19 矩阵 B

矩阵的每个索引都是 1,0 或 -1。我想计算每一行和每一列的出现次数。执行列计数很容易:

Colcount = sum( B == -1 );
Colcount = sum( B == 0  );
Colcount = sum( B == 1  );

然而,访问其他维度来获得行数被证明是困难的。可以在一个语句中访问它会很棒。 然后我需要使用 fprintf 语句将结果打印到屏幕上。

【问题讨论】:

    标签: matlab


    【解决方案1】:

    默认情况下sum 对矩阵的列进行操作。您可以通过为 sum 指定第二个参数来更改此设置。例如:

    A = [ 1 1 1; 0 1 0]; 
    C = sum(A,2);
    C -> [3; 1];
    

    另外你可以transpose矩阵得到同样的结果:

    A = [ 1 1 1; 0 1 0]; 
    C = sum(A');  % Transpose A, ie convert rows to columns and columns to rows
    C -> [3 1];  % note that the result is transposed as well
    

    然后调用fprintf 很简单,给它提供一个向量,它会为该向量的每个索引生成一个字符串。

    fprintf('The count is %d\n', C)
    

    计数是 3

    计数为 1

    【讨论】:

    • 我将添加我的传统警告并提醒大家MATLAB的'运算符是复共轭转置;对于非共轭版本,您应该使用 .'
    • @Edric 嘿,这也是“我的”警告!我很高兴发现有人有同样的 Matlab “宠儿” :-)
    【解决方案2】:

    SUM 的第二个输入参数表示in which direction you want to sum

    例如,如果你想分别计算1在行和列上出现的次数,并使用fprintf打印结果,你可以这样写:

    rowCount = sum(B==1,2);
    colCount = sum(B==1,1); %# 1 is the default
    fprintf('The rowCount of ones is\n%s\nThe colCount of ones is\n%s\n',...
       num2str(rowCount'),num2str(colCount))
    

    请注意,我使用num2str,以便您可以轻松打印矢量。

    【讨论】:

      猜你喜欢
      • 2017-12-04
      • 1970-01-01
      • 1970-01-01
      • 2017-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多