【问题标题】:Why does summing the rows in this matrix give me 0?为什么将这个矩阵中的行求和给我 0?
【发布时间】:2020-07-26 10:03:32
【问题描述】:

我首先使用命令A = [1:10]' 创建了一个数组A。 然后我创建了一个 10x10 矩阵,只包含 0。然后我用我的A 覆盖了这个矩阵,得到了这个新矩阵:

A =

     1     0     0     0     0     0     0     0     0     0
     2     0     0     0     0     0     0     0     0     0
     3     0     0     0     0     0     0     0     0     0
     4     0     0     0     0     0     0     0     0     0
     5     0     0     0     0     0     0     0     0     0
     6     0     0     0     0     0     0     0     0     0
     7     0     0     0     0     0     0     0     0     0
     8     0     0     0     0     0     0     0     0     0
     9     0     0     0     0     0     0     0     0     0
    10     0     0     0     0     0     0     0     0     0

现在的问题是,当我运行命令 sum((A(1,1)):(A(1,end))) 时,当我应该得到 1 时,我一直得到 0,因为它是第一行的总和。我尝试在其他矩阵上运行相同的命令,他们给了我正确的答案,为什么它在这里不起作用?

【问题讨论】:

  • 如果你想要第一行的总和,你可以使用sum(A(1, :))你的表达式将转换为sum((1):(0))
  • 你的意思大概是sum((A(1,1:end)))

标签: arrays matlab matrix sum


【解决方案1】:

术语

(A(1,1)):(A(1,end))

创建并清空数组,如A(1,1) = 1A(1,end) = 0 这使得colon : 无法创建向量,因此它的总和为零。但我猜这不是你想要的。

你想要的是

sum(A(1,:))

或者对于整个矩阵,通过指定总和的维度,例如

sum(A,2)

ans =

     1
     2
     3
     4
     5
     6
     7
     8
     9
    10

编辑

如果您想从不同的列索引开始,您可以执行以下操作:

sum( A(rowIndex,firstColumnIndex:lastColumnIndex) )

end 可以用作对应列或行的最后一个索引的宏变量。

【讨论】:

  • 啊,我明白了,谢谢!但是,我正在运行一个循环来在每一行中添加数字,而不是从头开始,这仅适用于第一行。我如何将剩余的数字相加,从沿行的任何点开始?
猜你喜欢
  • 1970-01-01
  • 2015-11-09
  • 2022-12-13
  • 1970-01-01
  • 2016-07-20
  • 2020-10-20
  • 2014-07-21
  • 2023-03-03
  • 1970-01-01
相关资源
最近更新 更多