对矩阵的行进行求和而不是列

时间:2012-10-07 02:13:34

标签: matlab

我有一个21x19矩阵B

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

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

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

2 个答案:

答案 0 :(得分:6)

默认情况下,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

答案 1 :(得分:3)

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,以便您可以轻松打印矢量。

相关问题