【发布时间】:2018-09-12 10:20:06
【问题描述】:
看着这个definition:
: sum (x, dim)
如果省略dim,则默认为第一个 非单一维度。
我尝试了几个命令:
>> sum([2,3,4]) % A matrix of size 1*3
ans = 9
>> sum([2;3;4;]) % A matrix of size 3*1
ans = 9
>> sum([2,3,4;2,3,4;2,3,4;]) % A matrix of size 3*3
ans =
6 9 12
虽然这些结果直觉上并不让我感到惊讶,但在我看来,结果#3 与 accepted answer 关于“第一个非单一维度”的定义相悖。
只是为了确保它选择默认的dim 为1:
>> sum([2,3,4;2,3,4;2,3,4;], 1) % does COLUMN-WISE SUMMATION
ans =
6 9 12
>> sum([2,3,4;2,3,4;2,3,4;], 2) % does ROW-WISE SUMMATION
ans =
9
9
9
所以问题是,如果接受的答案是正确的,那么默认情况下是否应该按行进行求和(考虑到矩阵是 3*3,并且行维度 > 1)?
【问题讨论】:
-
不是单例的第一个维度(即size==1)
-
案例#3的第一个非单一维度是1,因为
size(A,1)=3,并且3大于1。维度1是列,因为Matlab is column major。如sum documentation 所示,当dim=1时,sum按列操作。 -
@Wolfie。谢谢,现在说得通了。
-
与您的问题没有直接关系,但要进一步了解 matlab 的工作原理,您也可以尝试运行
sum([2,3,4;2,3,4;2,3,4;],3),它可以工作,因为即使您有一个二维矩阵,所有矩阵都有一个无限大尾随单例维度的数量。所以在这种情况下 [3x3x1x1x1x1x....]. -
@obchardon 是的,我尝试过使用
dim的任意值,但不知道为什么它的行为就像有默认的dim值一样。现在也很清楚了。谢谢。