2013-01-31 2 views
1

행렬이있어 각 열에 점 좌표가 포함됩니다. 나는 그 점을 말 : 점 집합을 행렬로 변환하는 방법

p1=(1,1) 
p2=(1,2) 
p3=(2,3) 

다음 매트릭스가 같을 것이다

1 1 0 
0 0 1 
0 0 0 

모든 좌표는 음수가 아닌,하지만 그들은 비이성적이다. 나는 10^15 (옥타브의 최대 정밀도)의 계수로 좌표를 곱한 다음과 같은 기능 매트릭스 통과 :

function MAT = transfer(pairs) 
    for i = 1:length(pairs) 
     x = round(pairs(i,1)); 
     y = round(pairs(i,2)); 
     MAT(x,y) = true; 
    end 
end 

불행하게도, 내가 오류 얻을 - 첨자 인덱스는 양의 정수 또는 전에 논리를해야합니다. 문제가 무엇인지 모르겠다. 왜냐하면 내가 반올림하고 긍정적 인 것이기 때문이다. 다른 사람이 문제를 찾도록 도와 주거나 전환을위한 다른 방법을 제공 할 수 있다면 기뻤습니다. 감사하게 생각합니다.
Shayol

답변

1

좌표 중 일부가 0으로 반올림 될 수 있습니다. 이것은 오류를 가져올 수있는 한 가지 방법입니다.
반올림 한 후에 쌍의 값이 모두 0인지 확인합니다.

또 다른 문제점은 10^15 x 10^15 조밀 한 매트릭스를 생성 할 수 있다는 것입니다. for 루프 대신 MAT를 생성하기 위해 희소 매트릭스를 사용하는 것이 좋습니다. 예 :

MAT = sparse(round(pairs(:, 1)), round(pairs(:, 2)), true(rows(pairs), 1)) 
+0

반올림 한 후 좌표가 0이 아닌지 확인했습니다. 나는 또한 희소 한 기능을 시도하고, 동일한 과실을 얻었다. – Shayol

0

여기의 문제는 간단합니다. 옥타브의 행렬은 벡터로 저장됩니다. 사용중인 단일 차원 인덱스는 옥타브의 최대 정밀도 내에 있지만 2D 매트릭스이며 최종 엔트리의 실제 인덱스는 10^30 정도입니다.

더 작은 승수를 사용해보십시오. 아마도 10^15보다는 10^7 일 것입니다. 아마도 공간이 부족할 것입니다. 따라서 희소 행렬을 사용하는 것이 좋습니다.

관련 문제