user7016448
user7016448

Reputation:

Matlab sums and integers

Thank you for any help in advance. I have a large matrix: 1,000,000 rows and 10 columns. I would like to sum each row and create a new matrix with only the rows that sum to integers. I've tried this so far and manipulated it in many ways, but I'm stuck. How can I do this?

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

Upvotes: 1

Views: 137

Answers (1)

Suever
Suever

Reputation: 65430

Rather than using a for loop and continuously expanding y which is going to be extremely slow for large x arrays, you can use the second input of sum to compute the sum for each row, and then you can determine which rows sum to an integer by comparing the rounded and original versions using a very small epsilon (the proper way to compare floating-point numbers).

% 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, :);

Upvotes: 1

Related Questions