Matlab,矩阵行的求和函数

时间:2014-10-24 22:03:45

标签: matlab matrix sum

基本上,sum函数计算列的总和,也就是说如果我们有4x4矩阵,我们将获得1X4向量

  

A = magic(4)

     

A =

16     2     3    13
 5    11    10     8
 9     7     6    12
 4    14    15     1
  

和(A)

     

ans =

34    34    34    34

但是如果我想获得行的求和,那么我有2个方法,第一个是得到矩阵的转置,然后得到转置矩阵的求和,最后得到结果的转置...... 。,第二种方法是使用维数参数求和函数“sum(A,2)”

  
    

A = magic(4)

  
     

A =

16     2     3    13
 5    11    10     8
 9     7     6    12
 4    14    15     1
  

和(A,2)

     

ans =

34
34
34
34

问题在这里我无法理解这是怎么做的,如果有人能告诉我这个方法背后的想法/概念,

3 个答案:

答案 0 :(得分:0)

我真的不确定你在问什么。 sum需要两个输入,第一个是多维数组A,比如说。

现在让我们在{1}和sA = size(A)之间取dndims(A)。 要了解B = sum(A,d)的作用,首先我们要了解B的大小。 这很简单,sB = sA; sB(d) = 1;。所以在某种程度上,它会减少"尺寸为A的尺寸d

其余部分是微不足道的:B中的每个元素都是A中维度d中元素的总和。

答案 1 :(得分:0)

基本上,sum(A) = sum(A,1)输出矩阵中列的总和。 1表示列。因此,sum(A,2)输出矩阵中行的总和。 2表示行。除此之外,sum命令将输出整个矩阵,因为只有2维度(行和列)

答案 2 :(得分:0)

很难准确地说出sum内部是如何运作的,但我们可以猜测它与此类似。

Matlab使用column-major order在内存中存储矩阵(或 N - 维数组)。这意味着3 x 4矩阵的内存元素的顺序是

1 4 7 10
2 5 8 11
3 6 9 12

所以它首先存储元素(1,1),然后是(1,2),然后是(13),然后是(2,1),......

实际上,这是您在应用linear indexing时使用的顺序(即,使用单个数字索引矩阵)。例如,让

A = [7 8 6 2
     9 0 3 5
     6 3 2 1];

然后A(4)提供8

考虑到这一点,很容易猜到sum(A,1)所做的是连续遍历元素:A(1)+ A(2)+ A(3)来获得第一个的总和然后,A(4)+ A(5)+ A(6)对第二列求和等。相反,sum(A,2)size(A,1)(本例中为3)的步长进行:A (1)+ A(4)+ A(7)+ A(10)计算第一行的总和等。

作为旁注,这可能与观察到sum(A,1)sum(A,2)更快的事实有关。