2012-10-02 5 views
4

나는이 문제에 대한 답을 찾기 위해 그물을 검색했습니다.Matlab은 if 문을 사용하여 배열을 비교합니다.

내가 많이 나는 중간지도를 만들려면이 값에서 다음

A = [2 4 6 8 ; 3 5 7 9 ; 1 4 6 9] 

row median = [ 5 6 5 ] 
col median = [ 2 4 6 9 ] 

같은 배열을 가지고있다. 그래서 배열을 만들었습니다

이 배열 내에서 세 가지 다른 값 : 1, 0, -1을 지정하려고합니다. 그래서 중간지도 출력은 'A'어레이의 크기가 동일 할 것이다 : 값이 행 및 열 중간 양보다 큰

  • 경우 "1"중간 맵에 할당
  • 는 IF 값이 행과 열의 중앙값보다 작 으면 "-1"이 중앙값 맵에 할당됩니다.
  • 그렇지 않으면 0입니까?

"A"배열의 모든 행과 열을 트래버스하고 해당 열과 행 중앙값과 어떻게 관련시킬 수 있습니까?

나는 C 코드로 코드를 작성했지만 성공했으나 Matlab에서 어려움을 겪었다. 여기

답변

1

내가 어떻게 할 것입니다 :

  1. 각 조건에 대한 논리적 인덱스 만들기 (큰 요소/적은 행/COL의 중간 이상)
  2. 를 사용하여 논리적 인덱스는 MedianMap를 업데이트합니다.

    [xMedian, yMedian] = meshgrid(col_median, row_median); 
    
    isRowHigh = (A > yMedian); 
    isColHigh = (A > xMedian); 
    
    isRowLow = (A < yMedian); 
    isColLow = (A < xMedian); 
    
    MedianMap(isRowHigh & isColHigh) = 1; 
    MedianMap(isRowLow & isColLow) = -1; 
    

    참고 : 코드에서

  • meshgridA
  • A > yMedian 같은 크기의 배열로 row_mediancol_median을 확장은 A 같은 크기의 행렬을 반환 모든 요소를 ​​비교하는 부울 결과가 포함 된 A이고 해당 요소는 xMedian입니다.
  • isRowHigh & isColHigh는 소자 와이즈 AND 부울 행렬 L 논리 지수 (부울 행렬)이다
  • MedianMap(L)
  • 의, 해당 L의 요소에 대응 MedianMap의 요소를 선택하여 행한다.

    MedianMap = ... 
        (bsxfun(@gt,A,col_median) & bsxfun(@gt,A,row_median.')) - ... 
        (bsxfun(@lt,A,col_median) & bsxfun(@lt,A,row_median.')); 
    

    이 하나가 멀티 스레드 (훨씬 더 큰 문제에 적합)이고 다른 답변에 관련된 임시직 중 하나를 가지고 있지 않습니다 여기

-1
MedianMap = (A > Rmedian'*ones(1,4))+ (A > ones(3,1)*Cmedian) -1 
+0

-1 : 이것은 OP가 원하는 것이 아닙니다. –

1

내가 그렇게 할 것입니다 방법 (훨씬 작은 피크 메모리 풋 프린트).

그것은 아니에요 아주 예쁜하지만 :) 가독성이 필요하시면 경우, 하나 BrianL의 대답으로 meshgrid, 또는 repmat 사용 그래서 : RASMAN했던 같은 사람 매트릭스에 의해

Col_median = repmat(col_median, size(A,1),1); 
Row_median = repmat(row_median.', 1, size(A,2)); 

MedianMap = ... 
    (A > Col_median & A > Row_median) - ... 
    (A < Col_median & A < Row_median); 

또는 곱셈 :

Col_median = ones(size(A,1),1) * col_median; 
Row_median = row_median.' * ones(1,size(A,2)); 

MedianMap = ... 
    (A > Col_median & A > Row_median) - ... 
    (A < Col_median & A < Row_median); 
관련 문제