2016-10-13 2 views
0

사전에 도움을 주셔서 감사합니다. 나는 큰 행렬을 가지고있다 : 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 
+0

간단한 테스트 매트릭스로 저에게 적합합니다. 'if' 조건을'if abs (x-round (x, 0)) TroyHaskin

+0

발생하는 오류에 대해 자세히 설명해 주시겠습니까? – AER

+0

@TroyHaskin 위의 코드는 합계 만의 행렬을 만드는 데 적합합니다! 그러나, 내가 원하는 것은 각 행에 대한 모든 요소를 ​​가진 행의 행렬이지만 정수에 합한 행만 있습니다. – Michael

답변

1

오히려 for 루프를 사용하여 연속적으로 큰 x 배열 매우 느리게 될 것이다 y 확장하는 대신, 각각의 행의 합을 계산하는 sum의 제 2 입력을 사용하고 결정할 수 있습니다 이 행은 매우 작은 엡실론 (부동 소수점 수를 비교하는 적절한 방법)을 사용하여 반올림 된 버전과 원본 버전을 비교하여 정수로 합산됩니다.

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

안녕하세요 @Suever 위의 코드는 원래 행렬에서 모든 행을 반환합니다. – Michael

+0

@Michael 모든 행이 정수가 아니겠습니까? 'x'의 예제를 제공 할 수 있습니까? – Suever

+0

예 모두 정수로 합쳐지지 않습니다. 어쩌면 3은 정수입니다. 행렬은 행당 9 개 요소의 하위 집합으로 25 개의 정수를 순열 (permutation) 한 것입니다. – Michael