【问题标题】:Summing over first 2D of 3D matrix对 3D 矩阵的第一个 2D 求和
【发布时间】:2014-03-20 05:49:27
【问题描述】:

假设我有一个大小为 (1,2,3) 的 3D 矩阵 A。类似的东西

A(:,:,1) = 
[1 2]

A(:,:,2) =
[3 4]

A(:,:,3) =
[5 6]

例如,我将如何找到构成前两个维度之和的 3 个值。

sum(A(:,:,1)  = 3

上述方法有效,但是当我尝试使用更大尺寸的数组时,例如 A 的大小为 (5,5,5),然后我得到一个二维数组作为答案,但我想要一个单值求和增加该数组的值。

【问题讨论】:

    标签: arrays matlab matrix


    【解决方案1】:

    尝试在您的sum 中使用reshape 将每个二维矩阵放入一列中:

    sum(reshape(A,[],size(A,3)))
    

    例如:

    >> A = randi(3,2,3,3)
    A(:,:,1) =
         1     3     1
         2     2     1
    A(:,:,2) =
         1     2     2
         1     2     3
    A(:,:,3) =
         2     2     1
         3     3     3
    >> sum(reshape(A,[],size(A,3)))
    ans =
        10    11    14
    

    我们你可以做sum(sum(...))

    编辑:泛化为size(A,3)

    【讨论】:

    • @user1431626 我修复了这个命令,所以它是通用的,当size(A,3) 是任意数字时工作,而不仅仅是 3。
    【解决方案2】:

    Matlab 的sum() 函数有一个sum(A,dim) 调用形式,可让您沿给定维度进行操作。所以你可以做sum(sum(A,1),2)。这将产生一个 1×1×3 数组,该数组是沿前两个维度求和的结果。您可以将其推广到其他维度并根据您认为合适的方式重塑输出。根据您的描述,您遇到的问题似乎是 sum() 一次仅沿一个维度运行,并且默认情况下是第一个维度,而不是多维数组中除最后一个维度之外的所有维度。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-02-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 2016-06-12
      • 1970-01-01
      相关资源
      最近更新 更多