【问题标题】:What exactly is first non singleton dimension of a matrix?矩阵的第一个非单维究竟是什么?
【发布时间】: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 关于“第一个非单一维度”的定义相悖。

只是为了确保它选择默认的dim1

>> 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 值一样。现在也很清楚了。谢谢。

标签: matlab matrix octave


【解决方案1】:

Matlab 中的矩阵具有维度(1=行,2=列,3=深度,...)。 因此,对于矩阵

>> A = [2, 3, 4;
        2, 3, 4;
        2, 3, 4]

沿维度 1 的总和将是行元素的总和(向下)。 沿维度 2 的总和将沿列(向右)等。

现在,也可以定义一个没有行但只有列和深度的矩阵。然后,因为行维度将为零,所以命令 sum(A) 将沿列求和。

>> A = zeros(0,3,3);
>> A(1,:,:) = [2, 3, 4; 2 3 4; 2 3 4]
>> sum(A)
ans(:,:,1) =
     6
ans(:,:,2) =
     9
ans(:,:,3) =
    12

【讨论】:

  • 很好的答案,除了你说“行维度将为零”,你的意思是“一”——即一个单一的维度。
  • +1。我总是找到一种考虑在此类“聚合器”函数中选择“维度”的好方法,就是将其视为选择您希望“压缩”到聚合结果中的维度(即,该维度将被压缩成一个大小在此操作结束时为 1)。
猜你喜欢
  • 2013-06-05
  • 1970-01-01
  • 2019-12-29
  • 2014-08-23
  • 2015-01-05
  • 1970-01-01
  • 2014-10-28
  • 2012-08-27
  • 2010-11-12
相关资源
最近更新 更多