2014-04-10 1 views
1

MATLAB을 사용하여 벡터로 행렬 화합물에서 가장 큰 벡터를 찾으려고합니다.하지만 몇 가지 어려움이 있습니다. 누군가 도움이된다면 매우 감사 할 것입니다. 나는 이것을 가지고있다 :행렬 내에서 가장 큰 벡터 찾기

값이 1 행과 다른 열 수의 벡터 인 1000x1000 행렬 인 행렬 경로 (Dijkstra 함수의 해) (열이 10보다 큰 경우 값은 "1x11 더블, 1x12 더블 등"). 처음에는

  1     2       3 .... 
    1  1     <1x20 double>    <1x16 double> 
    2 <1x20 double>   2       [2,870,183,492,641,863,611,3] 
    3 <1x16 double>  [3,611,863,641,492,183,870,2] 3 
    4 <1x25 double>   <1x12 double>    <1x14 double> 
    . 
    . 
    . 

나는 그러나 MATLAB은 B = 1000, 가능하다 값,하지만 가능성이없는을 반환 단지

B = max(length(paths)) 

에 의해 매트릭스에서 가장 큰 벡터를 찾는 생각 : 행렬의 경로는이 양식을 가지고 . 사용하여 벡터의 위치를 ​​알아 내려고 할 때 :

[row,column] = find(length(paths) == B) 

MATLAB 반환 확실히 잘못된 행 = 1, 열 = 1, ... 어쩌면 MATLAB 걸리는 방법에 문제가 있음을 생각 자료. 이 벡터와 행렬의 항목을 고려하지 않습니다처럼 입력하면 때문이다 :

length(paths(3,2)) 

그것은 나에게 하나를 반환하지만 내가 이해 도입 할 때 그것은 또한, 8을 반환해야합니다 :

paths(3,2) 

[1x8 double]을 반환하지만 전체 벡터를 볼 것으로 예상됩니다. 나는 "for"루프를 어떻게해야할지 모르겠다. MATLAB이 행렬의 데이터를 벡터 또는 단순한 double 값으로 취하는지는 정말로 모른다.

+0

당신이 무엇을받을 수 있나요'? – bla

+0

세포, 그럼, 그것은 세포의 매트릭스입니다.하지만 그것은 두 배의 값처럼 보입니다. – user2822577

답변

2

paths의 셀에 저장된 각각의 숫자 행렬의 요소 수를 얻을 cellfunnumel를 사용하여 발견 될 수있는 가장 큰 벡터 셀 :이 1000x1000 숫자 행렬 vecLens가 함유 얻는다

vecLens = cellfun(@numel,paths); 
[maxLen,im] = max(vecLens(:)); 
[rowMax,colMax] = ind2sub(size(vecLens),im) 

크기가 max이면 가장 큰 요소의 선형 인덱스를 얻고 ind2sub은 행, 열 인덱스로 변환합니다.

length에 대한 메모 : 가장 큰 치수의 크기를 제공합니다. paths의 크기는 1000x1000이므로 length(paths)은 1000입니다. 내 조언은 Doom ever use length입니다. 원하는 차원을 지정하여 size을 사용하십시오.


여러 벡터의 길이가 같으면 위의 방법으로 첫 번째 벡터를 얻습니다. 그들 모두를 얻으려면합니다 (max 명령 후 시작) : 당신은`클래스 (경로)를 실행할 때

maxMask = vecLens==maxLen; 
if nnz(maxMask)>1, 
    [rowMax,colMax] = find(maxMask); 
else 
    [rowMax,colMax] = ind2sub(size(vecLens),im) 
end 

하거나

[rowMax,colMax] = find(vecLens==maxLen); 
+0

'numel' 함수는 행렬의 원소의 수를 제공한다고 설명 할 것입니다. 'cellfun'으로 호출하면'paths' 셀 배열 안의 각 행렬에 numel을 호출합니다. 결과는'vecLens (r, c)'가'paths (r, c)'에서 경로의 길이를 포함하는 1000x1000 매트릭스가됩니다. –

+0

@RafaelMonteiro 제안에 감사드립니다. 업데이트 됨. – chappjc

+0

두 분 모두 고맙습니다. 귀하의 답변은 매우 유용합니다 : D – user2822577