基本上,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
问题在这里我无法理解这是怎么做的,如果有人能告诉我这个方法背后的想法/概念,
答案 0 :(得分:0)
我真的不确定你在问什么。 sum
需要两个输入,第一个是多维数组A
,比如说。
现在让我们在{1}和sA = size(A)
之间取d
和ndims(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)
更快的事实有关。