【问题标题】:Summing specific columns for each row in a matrix of double对双精度矩阵中每一行的特定列求和
【发布时间】:2019-12-12 02:12:09
【问题描述】:

我想使用 for 循环对矩阵中每一行的特定列求和。下面我包含了我的问题的简化版本。截至目前,我正在单独计算列总和,但这并不有效,因为我的实际问题有多个矩阵(数据集)。

a = [1 2 3 4 5 6; 4 5 6 7 8 9];
b = [2 2 3 4 4 6; 3 3 3 4 5 5];
% Repeat the 3 lines of code below for row 2 of matrix a
% Repeat the entire process for matrix b
c = sum(a(1,1:3));                   % Sum columns 1:3 of row 1
d = sum(a(1,4:6));                   % Sum columns 4:6 of row 1
e = sum(a(1,:));                     % Sum all columns of row 1

我想知道如何创建一个 for 循环,该循环自动循环并为我拥有的每个矩阵的每一行的特定列求和。

谢谢。

【问题讨论】:

  • sum(a(:,1:3),2) etc. 使用sum 的第二个输入来指示要求和的维度?
  • 嗨@David,我忘了提到我的矩阵是双格式的,所以你指出的代码没有给我正确的答案。关于如何进行的任何想法?谢谢。
  • 我不明白,在你的问题代码中,ab 都是双精度向量。
  • 嗨@David,我的错。我的意思是,假设我生成了一个随机矩阵g = rand(37,100),然后我使用sum(g(:, 1:50), 37),结果将以某种方式出现在 37 x 50 矩阵中。我想要的是一个 37 x 1 矩阵,即每一行代表矩阵中每一行的 1:50 列的总和。
  • 如何定义应该求和的列组?目前他们的索引是硬编码的。你有定义组的变量吗?

标签: matlab for-loop matrix nested-forms


【解决方案1】:

这是一个不需要使用for 循环的解决方案。

假设您有一个大小为2x12 的矩阵a,并且您想对每个4 列进行行求和,那么您可以使用reshape()squeeze() 得到最终结果:

k = 4;
a = [1:12
     13:24];
% a =
%    1    2    3    4    5    6    7    8    9   10   11   12
%   13   14   15   16   17   18   19   20   21   22   23   24

s = squeeze(sum(reshape(a,size(a,1),k,[]),2));

你会得到

s =

   10   26   42
   58   74   90

【讨论】:

  • @ChelseaG。好的,我明白了,你有不等大小的块来切片你的矩阵。你对切片有什么规定吗?在知道我更容易编辑我的答案之后
  • 感谢@ThomasIsCoding 的帮助。你所呈现的正是我真正想要的。我刚刚注意到我的列数不均匀的错误,并将更正上面最初发布的问题。对于造成的所有混乱,我们深表歉意。
  • @Kendo96 太好了!
  • @Kendo96 另外,我看到您还需要所有列的行总和。我猜你知道怎么做,即sum(a,2),所以我没有把它放在我的代码中。如果您认为我的回答解决了您的问题并且您对此感到满意,请单击投票下方的勾号接受它,那么您的帖子将在 SO 中被视为“已回答”。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-11-16
  • 1970-01-01
  • 2014-03-03
  • 1970-01-01
  • 2015-01-15
  • 1970-01-01
相关资源
最近更新 更多