【问题标题】:Matlab sums and integersMatlab求和和整数
【发布时间】:2026-02-03 21:15:01
【问题描述】:

提前感谢您的帮助。我有一个大矩阵:1,000,000 行和 10 列。我想对每一行求和并创建一个新矩阵,其中仅包含总和为整数的行。到目前为止,我已经尝试过并以多种方式对其进行了操作,但我被卡住了。我该怎么做?

for k = 1:1000000
  x = sum(A(k,:)) %A is my large matrix
  if x-round(x,0)==0
    y = [y;x]% y is my new matrix
  end
end

【问题讨论】:

  • 它适用于我的简单测试矩阵。如果将 if 条件更改为 if abs(x-round(x,0)) < eps 会发生什么?
  • 您能否详细说明所引发的错误?
  • @TroyHaskin 上面的代码非常适合制作仅包含总和的矩阵!但是,我想要的是一个行矩阵,其中包含每行的所有元素,但只有总和为整数的行。

标签: matlab


【解决方案1】:

您可以使用sum 的第二个输入来计算每一行的总和,而不是使用for 循环并不断扩展y,这对于大型x 数组来说会非常慢,并且那么您可以通过使用非常小的 epsilon(比较浮点数的正确方法)比较舍入和原始版本来确定哪些行总和为整数。

% Sum each row and divide by 3
row_sums = sum(x, 2) / 3;

% Determine which of the row-wise sums are integers
sum_is_integer = abs(round(row_sums) - row_sums) < eps;

% If you want the sums that were integers
y = row_sums(sum_is_integer);

% If you want a sub-matrix containing only the rows where the sums were an integer
z = x(sum_is_integer, :);

【讨论】:

  • 嗨@Suever,上面的代码正在返回原始矩阵中的所有行。
  • @Michael 您确定所有行的总和都不是整数吗?你能提供一个x的例子吗?
  • 是的,它们的总和并不都是整数。也许第三个是整数。该矩阵是 25 个整数的排列,每行包含 9 个元素的子集。
  • 如果一切都是整数的排列,那么任何整数之和也是一个整数。请在您的原始问题中提供一个示例矩阵。
  • 你说得对,对不起,每列的总和除以 3。哎呀!这很关键......然后我只想要整数行。